自制 Python 脚本抓取文库资料,selenium+PhantomJS 爬虫初接触

大家都应该有需要在百度文库下载文档的经历,或者充值成为微挨批(VIP),或者在某宝买券去下载,也有的勤勤恳恳的上传文章,慢慢的攒下载券,当然也有一点一点的复制粘贴。。。或者也有比较喜欢走捷径的,去什么什么文库等网站下载!或者一些人用其他破解方法,比如放到手机的百度文库APP里,另存为文章,不需要下载券就可以下载文章。诸如此类的方法,可谓五花八门。而对于学习爬虫的人来说,面对怎样免费下载一个付费的word文章的问题,第一个想到的应该就是:

自己写个程序搞下来。

以《中华人民共和国国家标准》为例,来看看怎么用python抓下来这篇文档!

url: https://wenku.baidu.com/view/378bf328fc4ffe473268ab12

感觉应该不难吧,至少开始我是这么想的,但是当我将文档拉到下面的时候,我看到了如下内容:

需要点击“继续阅读”才可以显示后面的内容,单抓这一页,是抓不完我们要的内容的。

那我们来抓包看看?然后一脸懵逼了

一堆不明觉厉的代码,各种广告推广。。。果断放弃!

还有什么办法能抓取内容呢?带着这个思考,selenium神器进入了我的脑海!

安装selenium和浏览器驱动这里就不细说了,大家自行网上查找吧,很多很详细的!

实战阶段

直接在网页中F12查看文档所在位置!

这里可以看到,文档中的内容都在<divclass="ie-fix">下面的P标签中,我们先用selenium取得网页源码,然后直接用xpath抓标签,取内容(中间有img标签显示图片的取出url)看看

果然可以,文档内容部分已经取出,接下来就是定位到“继续阅读”标签,模拟点击,然后取后半部分了!

定位代码如下:

page =driver.find_element_by_xpath('//div[@class="banner-more-btn"]').click()

整体代码和效果如下:

至此,完整文档就被我们抓下来了!如果有存在翻页的话,就需要定位后**页,除了第一次之后的都不需要在定位并点击“继续阅读”!当然中间还有图片等等形式的内容存在的文档,以url显示了!总体来说,selenium做爬虫还是比较简单粗暴的。

PS:这里我是用了PhantomJS,如果有用Firefox或者谷歌的小伙伴要注意,最新版的好像不是很友好,建议大家用稍微旧一点的版本!

本文分享自微信公众号 - 云飞学python(P542110741)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

postcss-lazysprite: 一种生成CSS 雪碧图的懒惰姿势

postcss-lazysprite 是一个基于PostCSS 开发的用于生成雪碧图图片及其CSS 的插件,经过半年持续迭代,现已稳定用在旗下两款产品的Web ...

32490
来自专栏ThoughtWorks

无障碍性测试工具 Pa11y|技术雷达

A11y(Accessibility)指的是用来帮助身心障碍者(残疾人)更加便利的使用先进技术的能力。目前世界上主要由各种人权组织和政府通过一些民间规则和政府规...

33750
来自专栏生信宝典

生信人写程序1. Perl语言模板及配置

生物信息领域常用语言 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python/Java..(胶水语言,数据格式转换...

24560
来自专栏Bug生活2048

微信小程序版博客——文章详情页设计及问题汇总

wxParse是将html格式的富文本内容转换成小程序可展示的内容的组件,在框架搭建那一篇文章中有提到。

1.2K40
来自专栏JackieZheng

AngularJS in Action读书笔记1——扫平一揽子专业术语

前(fei)言(hua):   数月前,以一个盲人摸象的姿态看了一些关于AngularJS的视频书籍,留下了我个人的一点或许是指点迷津或许是误人子弟的读后感。自...

20570
来自专栏前端黑板报

throttle与debounce的区别

注:文章中有例子无法在微信里面展示,最好看原文。 以前写过一篇文章《“节流函数”提高性能》,里面讲到用函数“节流”来减少执行次数(不影响体验的情况下),其实实现...

38450
来自专栏Java技术分享

Knockout.js是什么?

从本节开始介绍关于KnockoutJs相关的内容,本节主要介绍knockoutjs一些重要特性与优点,以及它与Jquery等框架库之间的区别。 1、Knocko...

32450
来自专栏田云专栏

数据流方案的思考

近两年前端开发从jquery演化到了谈必及react vue ,大部分人已经习惯了

29830
来自专栏Golang语言社区

Go语言并发模型的2种编程方案

概述 我一直在找一种好的方法来解释 go 语言的并发模型: 不要通过共享内存来通信,相反,应该通过通信来共享内存 但是没有发现一个好的解释来满足我下面的需求: ...

33990
来自专栏张戈的专栏

利用JS生成二维码图片,优化WEB性能及页面加载速度

移动互联网的蓬勃发展绝对离不开二维码的“推波助澜”,一张小小的图片,省去了繁琐的苦逼输入,也拉近了 PC 端和移动端的距离!虽然是东洋人最初发明的,但我还是要给...

52840

扫码关注云+社区

领取腾讯云代金券