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

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

 

01

搭建环境

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

 

 

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

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

 

python爬虫实战pdf下载 python爬虫教程百度云_pycharm

 

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

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

python爬虫实战pdf下载 python爬虫教程百度云_python_02

 

02

开始编码

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

 

pip3 install requests
pip3 install my_fake_useragent
pip3 install python-docx
pip3 install opencv-python
pip3 install python-pptx
pip3 install selenium
pip3 install scrapy
pip3 install beautifulsoup4

 

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

 

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

 

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

 

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

 

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()

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

 

python爬虫实战pdf下载 python爬虫教程百度云_python爬虫实战pdf下载_03

就会显示一个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

效果演示

 

python爬虫实战pdf下载 python爬虫教程百度云_selenium_04