Python爬虫抓取收集考试大纲

專 欄

Garfield_Liang,Python中文社区专栏作者。

博客地址:http://www.jianshu.com/u/cac1d39abfa9

今天做了个小玩意,但觉得挺有意思的,分享给大家。主要是这样的,因为帮妹子寻找考试资料,发现同一本书不同的章节分别在不同的链接中,复制起来实在要命,所以就在想能不能用爬虫实现。下图是我们要爬取得页面,注意看下面叫讲义的表格:

首先结合Request和BeautifulSoup来对这个主页进行处理,提取不同章节的href。在这里需要注意,我们的页面是html类型(看网址结尾)。BeautifulSoup中,网页解析器要采用lxml的话,会有半截页面解析不出来。这里使用html5lib解析器。

页面解析出来后,发现解析内容和页面的page source一样,亦即使没有采用js加载内容。通过Inspect定位链接地址,很轻易能找到以下内容,发现所有的章节都在标签为td,分类(class)为lianjie或者lianjielanse里面,章节link的在page source中的位置如图:

这个时候可以通过Beautiful里面的find_all来将符合条件的链接找出来。但同时我们看到两个class其实是有共同点的(前面都是lianjie),这样我们可以将find_all结合正则表达式来减轻我们的工作,详细说明可以看这里的搜索文档树章节。

注意,网址所列出的课程章节是有重复(时间上有更新)的,我这里省方便就没有考虑这个问题了。另外,章节表格最右下角有个空格,实际也是有自己的href的,但既然主页将它隐藏了,那么我们在挑选的时候,也将其排除。

这样就得到一个包含章节题目以及网址的dict了。后面只需要对dict里面的网址内容进行爬虫就好了。

通过Ctrl+F比较快就能定位到内容了。一开始以为这个class是一个定值,后面做循环的时候才发现不是。查看上下文,看到上面有一个class里面包含定值ArticleIntro,并且全文只有你一个,就通过你来定位(注意ArticleIntro后面那段英文也是随机的,所以这里也要用正则表达式提取)。

章节内容的page source的位置以及定位

提取出来的div中,有一些内容是我们不需要的,可以通过BeautifulSoup中的decompose命令结合children和find将他们剔除后删除。

这样就干净了。最后加入循环实现批量处理就好了。对我们的link建立循环,并且将提取出来的内容写入到html结尾的文件中,注意文件打开方式应该是'a',因为你需要appending:

最后结果只要用浏览器打开就好了。当然,你也可以通过weasyprint将结果输出为pdf。

原文发布于微信公众号 - Python中文社区(python-china)

原文发表时间:2017-03-20

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go微服务 - 构建我们的第一个服务

虽然通过HTTP提供JSON服务不是内部服务和外部服务的唯一选择,但本文聚焦的是HTTP和JSON. 使用RPC机制和二进制消息格式(例如Protocol Bu...

25740
来自专栏智能大石头

NewLife.Net——构建可靠的网络服务

16830
来自专栏智能大石头

NewLife.Net——构建可靠的网络服务

老规矩,先上源码:https://github.com/nnhy/NewLife.Net.Tests

13000
来自专栏Golang语言社区

【Go 语言社区】Web 通信 之 长连接、长轮询(long polling)--转

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。 一、什么是长连接...

1.2K30
来自专栏数据之美

Zookeeper 原理与实践

1、Zookeeper 的由来 在Hadoop生态系统中,许多项目的Logo都采用了动物,比如 Hadoop 和 Hive 采用了大象的形象,HBase 采用了...

94980
来自专栏java达人

Kafka漫游记

我是一条消息,从我被生产者发布到topic的时候,我就清楚自己的使命:被消费者获取消费。但我一直很纳闷,把我直接推送给消费者不就行了,为什么一定要先推送到类似队...

27170
来自专栏zhisheng

0Day技术分析-1-基础知识

1 基础知识 本章介绍一些与0Day相关的基本概念及基础知识。 1.1. Bug与漏洞 有一个比较有趣的事件,话说某个软件中存在99个Bug,某一天研发人员心血...

33340
来自专栏王磊的博客

Node出错导致运行崩溃的解决方案

许多人都有这样一种映像,NodeJS比较快; 但是因为其是单线程,所以它不稳定,有点不安全,不适合处理复杂业务; 它比较适合对并发要求比较高,而且简单的业务场景...

859140
来自专栏大前端开发

从编程小白到全栈开发:基于框架开发服务端

上文中,我们了解了关于服务器端的一些概念知识,尤其是HTTP协议相关的最基本知识点,今天我想跟大家分享一下在平时正真的开发中,是如何来利用和体现这些内容的。

12430
来自专栏数据小魔方

R语言爬虫实战——知乎live课程数据爬取实战

本文是一篇R语言爬虫实战练习篇,同样使用httr包来完成,结合cookies登录、表单提交、json数据包来完成整个数据爬取过程,无需书写复杂的xpath、cs...

48460

扫码关注云+社区

领取腾讯云代金券