更新这个代码最近又改了一点,另外和其他一些小程序一起放在了一个jupyter notebook里,现在挂在github上面。github现在对jupyter notebook的支持非常的好,甚至可以直接在网上运行。不过这个例子涉及了selenium,所以是没法在github上面跑起来就是了。github页面地址:https://github.com/beneon/smallTools​github.com

原先的文章:https://talkpython.fm/episodes/show/142/automating-the-web-with-selenium-and-instapy​talkpython.fm

我是最近听podcast 的时候发现这个东西的。简单来说是一个帮你在网页上面点来点去的机器人。InstaPy是用了这个框架来爬instagram,这个比较高大上。我这种水平只希望能用selenium帮忙爬一下百度文库。

百度文库的ppt是没的说的,毕竟已经全部转成了图片,爬也是白瞎。但是我不想再一些Word文档上面浪费我的点数啊。以前用javascript结合autohotkey,勉强能用:路人乙小明:百度文库word文档抓取naive实现​zhuanlan.zhihu.com

今天试了试selenium,也可以实现类似的需求,关键这次完全不用任何鼠标操作了。

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import re

browser = webdriver.Chrome()

browser.get('https://wenku.baidu.com/view/xxxlorem ipsumxxxx.html')

这一段是导入selenium,打开一个chrome浏览器webdriver,这个webdriver需要自己额外下载放到python的目录里面。具体操作参见:1. Installation - Selenium Python Bindings 2 documentation​selenium-python.readthedocs.io

上面的是selenium python版本的用法,除了driver的安装还有很多其他有用的内容,自己看去。

pageInput = browser.find_element_by_class_name("page-input")

pageInput.clear()

pageInput.send_keys("1")

pageInput.send_keys(Keys.RETURN)

elem = browser.find_elements_by_class_name("reader-page")[0]

subelems = elem.find_elements_by_class_name("reader-word-layer")

这里是转到第1页,顺便获取第一页下面的所有reader-word-layer类div。这个class的名称,包括前面的reader-page自己用chrome分析一下百度文库的文档就知道了。

# 行融合部分开始

print(lineMerging(subelems))

# 这个是引用行融合

reTopVal = re.compile(r'top: (\d+)px')

def getYpos(e):

"""获取一个字符block的style里面的top属性,相关的regex在函数外面已经compile完成"""

mo = reTopVal.search(e.get_attribute('style'))

return mo.group(1)

def lineMerging(elems):

"""根据位置top信息判断是否属于一行,如果是新的一行加上换行符以后再连接文字"""

topTemp = ""

rstString = ""

for e in elems:

if topTemp == getYpos(e):

rstString += e.text

else:

topTemp = getYpos(e)

rstString += '\n' + e.text

rstString=rstString.replace('\n','{newline}')

rstString=rstString.replace('\n','')

rstString=rstString.replace('{newline}','\n')

return rstString

每一个reader-word-layer的div都有一个style属性,里面标明了这个div的top属性。同一行的文本top都一样,所以根据top可以将同行的div内文字合并。

另外和pdf一样,会有硬换行。百度文库的特点是,如果是真的换行,是‘ \n’(两个空格加一个换行符),而硬换行则是单纯的'\n'。所以比较蠢的办法就是做三次全局文本替换……

上面的代码我在jupyter notebook里面跑过没什么大问题

selenium python文档_selenium+python实现百度文库word文档抓取相关推荐

  1. ubuntu右键点击没有新建文档_如何复制百度文库豆丁文档

    只需要浏览器,复制在线文档平台的内容生成文档的技巧.这里的浏览器需要有开发者工具选项,现在一般的浏览器如谷歌.火狐.360浏览器等都自带这个.下面以360安全浏览器为例. 一.以搜索引擎爬虫的身份访问 ...

  2. 二十一、Python爬取百度文库word文档内容

    @Author:Runsen 百度文库在我们需要查找复制一些文档的时候经常用到,下载要收费,开会员,一个字都不给复制,这个时候初学python的小伙伴肯定有个写个百度文库爬虫的想法,这里我给各位分享一 ...

  3. js预览本地word文档_怎么免费下载百度文库付费文档?

    我们都知道百度文库中的Word文档,免费的少,大部分是需要下载券的,或者需要开通vip才能下载的!而这些券和vip都是需要钱买的,那我们有什么办法,能任意使用.下载需要的文档呢?下面我来分享一下我的方 ...

  4. 还敢白嫖吗?利用插件破解百度文库下载文档,被判赔200万元!还不收手吗?

    百度文库,是百度于2009年11月12日发布的供网友在线分享文档的平台. 百度文库的文档由百度用户上传,经过百度的审核后方可发布,支持其他网友在线阅读和下载. 百度文库的文档内容非常全面,包括了教学资 ...

  5. 使用python中的Selenium爬取百度文库word文章

    参考文章:Python3网络爬虫(九):使用Selenium爬取百度文库word文章,链接为: https://blog.csdn.net/c406495762/article/details/723 ...

  6. Python+Tesseract-OCR识别图片文字并保存到word文档

    目录 使用Python+Tesseract-OCR识别图片文字并保存到word文档 安装Tesseract-OCR 配置Tesseract-OCR 通过CMD验证Tesseract-OCR工作 安装p ...

  7. Python 将excel中的选择题 导入到word文档中

    Python 将excel中的选择题 导入到word文档中 0x00 昨天,我的老师给我们一个包含600道关于比赛的选择题和判断题的excel文档,要我们整理成指定格式的word文档以后交给他.我看着 ...

  8. python find()效率_基于python分别采用同步与异步(协程)方式抓取时光网TOP100电影...

    欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 如题,同步运行就是python按照代码 ...

  9. Python爬虫编程思想(6):实战案例:抓取所有的网络资源

    Python爬虫编程思想(7):实战案例:抓取博客文章列表 到现在为止,我们已经对网络爬虫涉及到的基本知识有了一个初步的了解.本文会编写一个简单的爬虫应用,以便让读者对爬虫有一个基本的认识.本节要编写 ...

最新文章

  1. 如果有电脑——计算机达人成长之路(36)
  2. 【星·企业】竞逐卫星互联网“新基建”,「九天微星」完成2.7亿元B 轮融资
  3. 十一.python面向对象(接口)abstractmethod,ABCMeta
  4. Windows 下直接运行 Linux的Live CD版的方法
  5. tarjan求LCA模板
  6. strconv---用来基本类型之间的转换
  7. 手机java软件_浅谈软件开发就业前景
  8. idea实现抽象类的所有抽象方法_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点
  9. mysql yum 升级_CentOS 7中升级MySQL 5.7.23的坑与解决方法
  10. VS 2010 安装 .net framework2.0/3.0/3.5
  11. Centos6.5 安装 Mysql-5.6.41
  12. 自定义类加载器的父类为什么是AppClassLoader?
  13. [编辑器]_从 VI 编辑器谈 FreeBSD 的前世今生以及编辑器本质
  14. H3C交换机常用命令大全
  15. 夜晚网速变慢与网站服务器开机数量减少有关,【网络】网速慢的原因与对策
  16. 无法将数值CLSID写入 \Software\Classes\PROTOCOLS\Handler\ms-help。
  17. JavaScript节点操作、删除节点
  18. 设计模式 - 学习笔记 - 适配器模式AdapterPattern
  19. Linux下Oracle 11g安装(3)—— Oracle安装篇
  20. 金庸小说数据化中的部分题目答案

热门文章

  1. Java正则之Unicode属性匹配的那些事
  2. linux网卡顺序问题,linux网卡绑定及网卡顺序变更测试.docx
  3. 网页版本的飞行日志分析平台是_一个轻便的实时日志收集平台wslog
  4. Spark_Sql50题(DataFrame)
  5. php 单例模式 构函数,PHP设计模式——单例模式(Singleton Pattern)
  6. c语言switch scanf语句,c语言switch语句 谢谢·!~!~
  7. 雷军宣布:启动小米成立以来最大组织架构变革(附内部邮件原文)
  8. Datrium公司以几近疯狂的方式提升速度表现
  9. 修改同一张表的同一个字段的两个不同的值。
  10. 模式窗口showModalDialog的用法总结