手把手教你Python+selenium爬虫百度文库源码+解析

免费资源猫-爱分享的猫。

最近小编在弄python爬虫项目,可能大家一听爬虫,就觉得高大上,其实爬虫并没有多难,只要你稍微研究一下,掌握了基础的东西,后续爬虫就是重复利用的事情了。今天给大家来一下普及,希望你都能掌握

 

01

搭建环境

既然是python爬虫,自然先要安装好python环境,从事技术的人都知道开发IDE,其实小编其实有不是必须的,只要是文本编辑器都可以,当然对于小白还是建议安装IDE,这样能减少不少配置的工作。

 

 

这里就推荐搭建下载安装一下:PyCharm

具体安装下载地址和安装就不赘述了。

 

 

下载安装完,会让你选择python库的版本,根据自己的需要进行下载安装。

安装成功后,基本你的python基础环境就有了,可以在python console窗口查看自己的python版本,和运行命令

 

02

开始编码

首先工具引用库 (前提是你安装的是python3.x版本)

 

pip3 install requestspip3 install my_fake_useragentpip3 install python-docxpip3 install opencv-pythonpip3 install python-pptxpip3 install seleniumpip3 install scrapypip3 install beautifulsoup4

 

有了这些库之后,就可以进入正式的逻辑

 

首先给大家讲下整个项目的原理,其实整理一句话就是,用代码控制浏览器,然后操作浏览器去模拟人的操作,然后在利用截图,下载等方式将内容保存下来的过程。

 

既然是控制浏览器,那必不可少的就是下载浏览器的执行文件

 

本文使用的是浏览器chrome谷歌浏览器,我相信大家用这个浏览器的人还是大多数的。

 

chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver/ 这个地址下载对应版本的chromedriver,比如你的浏览器版本是87.0.4280,你就可以找到87.0.4280.20/这个链接,如果你是windows版本然后选择chromedriver_win32.zip

也就是说是通过chromeDriver去打开你本地的chrome浏览器,然后模拟操作,所有就需要下载对应好你本地安装的版本。

 

新建download_doc_ppt_bdwk.py,是本工具的主要类

 

新建启动main​​​​​​​

if __name__ == "__main__":    start_chrome = StartChrome()    # start_chrome.create_doc_txt(doc_dir_path)    start_chrome.create_ppt_doc(ppt_dir_path, doc_dir_path)    #start_chrome.test(ppt_dir_path, doc_dir_path)    # start_chrome.brower.quit()

先启动一个chrome

​​​​​​​

    def __init__(self):        mobile_emulation = {"deviceName": "Galaxy S5"}        capabilities = DesiredCapabilities.CHROME        capabilities['loggingPrefs'] = {'browser': 'ALL'}        options = webdriver.ChromeOptions()        # 无界 Chrome 运行        # options.add_argument('--headless')        # options.add_argument('--disable-gpu')        # options.add_argument('--window-size=1366,768')

        options.add_experimental_option("mobileEmulation", mobile_emulation)        self.brower = webdriver.Chrome(executable_path=chromedriver_path, desired_capabilities=capabilities,                                       chrome_options=options)        # 启动浏览器,打开需要下载的网页        self.brower.get(url)        self.download_img = DownloadImg()

浏览器可以无界面运行,就是我的电脑不会显示对应的打开一个浏览器界面,也可以显示,如下:

 

就会显示一个chrome正在受控于自动化测试的界面,然后我们可以看到浏览器已经帮我们打开了对应的页面

 

先讲一下xpath,这个是整个程序的理解重点,理解了整个基本完成一大半了

​​​​​​​

    def click_ele(self, click_xpath):        # 单击指定控件        click_ele = self.brower.find_elements_by_xpath(click_xpath)        if click_ele:            click_ele[0].location_once_scrolled_into_view  # 滚动到控件位置            self.brower.execute_script('arguments[0].click()', click_ele[0])  # 单击控件,即使控件被遮挡,同样可以单击

 

浏览器打开页面之后,我们要做的就是模拟操作对吧,那模拟操作的肯定是界面上的按钮点击或者表单之类的,那怎么找到我们要的控件呢

find_elements_by_xpath,这个就很重要了,根据函数其实能理解,就是通过xpath去查找对应的元素,其实有个技术基础的人,基本也明白,无外乎findByID, findByTag,findByName等等,在这么方法中,xpath算是相对灵活的一种方式

 

Selenium提供了以下方法用来定位

 

  • find_element_by_id

  • find_element_by_name

  • find_element_by_xpath

  • find_element_by_link_text

  • find_element_by_partial_link_text

  • find_element_by_tag_name

  • find_element_by_class_name

  • find_element_by_css_selector

 

本工具使用find_element_by_xpath进行定位元素的,具体xpath的语法可能需要你自行百度学习一番了,自然不是本文要阐述的事情。

 

大家也可以看到,打开页面之后有各种弹屏,所以就要定位弹屏的关闭按钮,然后模拟点击进行关闭,同时文档预览就需要不断的点击分页按钮,让我们能预览所有,因此就需要如下代码​​​​​​​

# 点击关闭开通会员按钮
        xpath_close_button = "//div[@class='guide-to-univer-app-pop']/div[@class='close-btn']"        self.click_ele(xpath_close_button)


        # 点击取消打开百度app按钮        xpath_next_content_button = "//div[@class='btn-wrap']/div[@class='btn-cancel']"        self.click_ele(xpath_next_content_button)
        # 点击继续阅读        xpath_continue_read_button = "//div[@class='foldpagewg-icon']"        self.click_ele(xpath_continue_read_button)        # 循环点击加载更多按钮,直到显示全文        click_count = 0        while True:            # 如果到了最后一页就跳出循环            if self.brower.find_elements_by_xpath("//div[@class='pagerwg-loadSucc hide']") or self.brower.find_elements_by_xpath("//div[@class='pagerwg-button' and @style='display: none;']"):                break            # 点击加载更多            xpath_loading_more_button = "//span[@class='pagerwg-arrow-lower']"            self.click_ele(xpath_loading_more_button)            click_count += 1            print("第{}次点击加载更多!".format(click_count))            # 等待一秒,等浏览器加载            time.sleep(1.5)

等这些都正常完成之后,就是完整的展示了文档的界面了,剩下的就是根据文档的类型,做不同的抓取逻辑​​​​​​​

# 获取html内容        sel = Selector(text=self.brower.page_source)        #判断文档类型        xpath_content = "//div[@class='file-type-icon file-icon ppt']"        contents = sel.xpath(xpath_content).extract()        if contents:#如果是ppt            self.create_ppt(ppt_dir_path, sel)        else:#如果是doc            self.create_doc(doc_dir_path, sel)        # a = 3333        self.brower.quit()

 

ppt或者pdf其实原理是一样的,预览的时候就是一张张图片,我们要做的就是把图片都保存下来,然后在图片保存到一个文件中,最终生成ppt或者pdf

 

文本或者word就更简单,就是获取html中的文本信息,当然一般word文档中的格式可能就需要更细致的研究才能更高的还原,本工具暂未有细化这些功能,当然如果后续有时间,我会单独出一期对应教程。如果大家需要的话,呵呵。

 

03

效果演示

 

 

 

需要的小伙伴,识别下面的二维码,关注后回【046】即可速取!你懂!

 

识别二维码,回复:046

手把手教你Python+selenium爬虫百度文库源码+解析_第1张图片

你可能感兴趣的:(源码,工具,pycharm,selenium,python)