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

最近小编在弄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. 从原理到实现丨手把手教你写一个线程池丨源码分析丨线程池内部组成及优化

    人人都能学会的线程池 手写完整版 1. 线程池的使用场景 2. 线程池的内部组成 3. 线程池优化 [项目实战]从原理到实现丨手把手教你写一个线程池丨源码分析丨线程池内部组成及优化 内容包括:C/C+ ...

  2. 手把手教你搭建查题网站 附带源码

    手把手教你搭建查题网站 附带源码 准备服务器/主机,域名 ,源码 下载源码:https://boo.lanzous.com/iLx2cg0oyhg 搭建步骤:默认已拥有服务器(空间)及域名 整个压缩包 ...

  3. 跳一跳python辅助软件思路及源码解析

    跳一跳python辅助软件思路及图像识别源码解析 本文将梳理github上最火的wechat_jump_game的实现思路,并解析其图像处理部分源码 首先废话少说先看效果 核心思想 获取棋子到下一个方 ...

  4. java 仿百度文库源码_java开发_模仿百度文库_OpenOffice2PDF_源码下载

    这几天在研究模仿着做类似于百度文库的东西,在这里给大家分享一下我自己做的东西. 由于需要做这样的项目,我查阅了很多资料,最后选定一下方案去做: Txt/Word/Excel/PPT=>PDF(O ...

  5. 手把手教你,嘴对嘴传达------源码编译LNMP部署及应用 , 手动搭建discuz论坛

    文章目录 前言 一.LNMP架构的部署(理论) 1.LNMP架构概述 2.MySQL安装配置 3.PHP解析环境的安装 4.配置Ngnx支持PHP环境 5.常见的PHP开源产品介绍 二.LNMP应用部 ...

  6. python 解包_【源码解析】python解包操作一文完全理解

    解包是如何操作? >>> a, b = [1, 2] # 以下为此解包操作的字节码 0 LOAD_CONST 1 (1) 2 LOAD_CONST 2 (2) 4 BUILD_LIS ...

  7. java 仿百度文库源码_java开发_模仿百度文库_SWFTools_源码下载

    1 /** 2 *3 */ 4 packagecom.b510.pdf2swf;5 6 importjava.io.BufferedReader;7 importjava.io.File;8 impo ...

  8. 【java家教系统】手把手教你制作计算机毕业设计(附源码+课件)

    很多大四同学苦于没有参考的毕设资料,或者下载的资料不全.代码有问题,数据有问题等等,造成毕设出现问题影响大学毕业.现在,免费提供项目源码和视频教程,让大家在短时间内可以完成自己的毕业设计. 对于jav ...

  9. 【Golang项目实战】手把手教你写一个备忘录程序|附源码——建议收藏

    博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作.目前在学习和分享:数据结构.Go,Java等相关知识. 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标:写好专栏的每一篇文 ...

最新文章

  1. COSO企业风险管理框架2017版发布!看看有哪些变化?
  2. 打造云上金融!网易云信入选「2021 数字化转型最佳案例 Top10」
  3. python编程的条件语句_自学Python编程【第五节】if条件语句
  4. spring事务管理-注解配置aop事务(重点)
  5. DIV的边距属性在Chrome和IE中的区别
  6. FastDFS 安装
  7. 从零开始利用vue-cli搭建简单音乐网站(四)
  8. sklearn学习5-----模型评估(1) 分类度量
  9. Atom 备份神器 —— Sync Settings
  10. php里面get和post请求,php中GET和POST请求发送几种方法总结
  11. CF986F Oppa Funcan Style Remastered
  12. Java应用基础微专业-设计篇
  13. ai人工智能的本质和未来_人工智能如何塑造音乐产业的未来
  14. 什么样的水平才算是java高级工程师?
  15. Ardunio开发实例-雨滴传感器
  16. unity3D学习笔记2
  17. 【概率论与数理统计(研究生课程)】知识点总结6(抽样分布)
  18. Android实现圆形图片 真菜鸟食用
  19. 方维P2P借贷网商业系统3.6.9源码 红色风格+蓝色风格
  20. PTA 硬币找钱问题

热门文章

  1. 什么是开源网络情报(OSINT)及其使用方式
  2. 如何将数据设计成报表模板
  3. HTTPS加密网站,地址重写配置
  4. 抖音电子画册教程html,抖音爆火文字视频制作教程
  5. uc浏览器手机端禁用复制
  6. Error instantiating servlet class 的解决办法
  7. Error. Flash Download failed - Target DLL has been cancelled
  8. 微信公众号新上线“快捷私信”功能 微信留言功能没有的号迎来转机
  9. 一个程序员多年的收藏
  10. 使用python计算三角形面积