Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

voidmous/funscripts

Open more actions menu

Repository files navigation

funscripts

getMakeUseOfCheatSheet*.py

爬取静态网页MakeUseOf Cheat Sheets 的下载链接,下载数不多,又是静态的,所以难度不大。

Python可以用两种方式进行下载:

  1. 使用urllib,urllib2,urllib3,requests下载
  2. 使用os.system()调用shell命令下载

两个脚本分别作了实现。

getDZoneRefCardz.py

此脚本用于下载DZone RefCardz所有的pdf文档,需要此网站注册账号支持。由于此网站注册非常严格,甚至被网友称为Worst registration form on the internet? DZone.com,所以注册时我个人推荐使用信息生成器,你懂的。

主要实现了python模拟登陆、网页使用BeautifulSoup4解析与搜索、日记记录、文件名提取 和下载链接数据库存取。

所有相关的文件都存储在'RefCardz'目录下。

由于下载文件较多,因此推荐在网络空闲时段下载。如果中途下载失败,可以重新开始下载 ,由于随机搜索的机制,程序不会重新按部就班开始,而是随机选择链接,如果已经下载并 并记录则放弃。

爬虫编写的实践积累

动态网页分析是难点和重点

静态网页抓取难度不大,而动态网页抓取难点和重点都在分析POST、模拟提交表单上面, 做好了第一步,脚本的编写反而简单了。

日志和数据库

推荐使用面向过程方式,对脚本执行每一步做好日志记录,可以省去很多DEBUG的时间。对于 抓取对象很多的情况,用数据库存储链接是很有效的方法,一来保证程序即便中断也不会 重复不必要的操作,二来可以用于后续的处理。

网页解析

虽然正则表达式很强大,但是基于两点理由它并不好使:

  1. 写出精确匹配健壮性好的表达式很难,尤其是HTML这种有大量重复标签的场合
  2. 网页结构经常发生改变

我个人更喜欢BeautifulSoup的解析,基于标签的搜索很容易分析,健壮性也很好。

提取链接或者其它标签时,find_all()方法是很常用的,但它往往返回的是一个 按部就班搜索得到的列表。如果脚本中断,重新执行时又会按顺序处理,如果网站对 某个链接的单位时间访问设了限制,就很容易被屏蔽。一个解决思路是利用 random.shuffle(list)方法打乱列表内元素顺序,这样每次都是随机开始处理,避免了 个别链接被持续访问的尴尬。

About

crawler scripts and etc

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.