1 资料
- 《Python网络爬虫从入门到实践》唐松,陈志铨。主要面向windows平台下的python3。
- 百度知道
- 可怜(误)的豆瓣读书
- 其它见注脚
2 笔记
2-1 准备
书中推荐的实践项目如下,我首先打算做一个类似的项目 。
本章实践项目的目的是获取豆瓣电影TOP250的所有电影的名称,网页地址为:https://movie.douban.com/top250。在此爬虫中,将请求头定制为实际浏览器的请求头。
- 判断静态与否
实践第一步,找目标。而这首先要找到一个大概率是静态网页才好继续下一步,关于这个问题百度之后发现1:(自带引用格式看起来太难受,我改成代码块了)
动态网页是与静态网页相对应的,也就是说,网页URL的后缀不是.htm、.html、.shtml、.xml等静态网页的常见形式,
而是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”。
- robots.txt
确认了目标静态与否,找目标的下一步就是看robots.txt了(然而不少网站没有这个,总之试试吧)。这次先拿豆瓣读书试试:
User-agent: *
Disallow: /subject_search
Disallow: /search
Disallow: /new_subject
Disallow: /service/iframe
Disallow: /j/
Sitemap: http://www.douban.com/sitemap_index.xml
Sitemap: http://www.douban.com/sitemap_updated_index.xml
User-agent: Wandoujia Spider
Disallow: /
- 续
我已经看不太懂了……User-agent: *和Disallow:还好,但Disallow:后面的还有Sitemap: 都不明白呢。
- Disallow:
回顾笔记(1),总算明白Disallow:后面那一长串的意思了:
Disallow: /abc 表示禁止访问收录abc.php、abc.html和abc文件夹下的所有文件。 Disallow: /abc/ 表示仅禁止访问abc文件夹下的所有文件,但是不限制abc.php、abc.html文件。
也就是说Disallow: /subject_search表示禁止访问收录在subject_search.php、subject_search.html和subject_search文件夹下的所有文件。
看起来这次第一个目标https://book.douban.com/top250?icn=index-book250-all(豆瓣读书TOP250)并没有限制这些,那倒是可以放心地访问了。(但它好像是个动态网页,真得没关系吗?) - Sitemap:
Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。
打开豆瓣读书的第一个Sitemap,其中一小段为:
<sitemap>
<loc>https://www.douban.com/sitemap17.xml.gz</loc>
<lastmod>2019-08-31T20:56:17Z</lastmod>
</sitemap>
- Sitemap:续
其中< lastmod >是该链接的最后更新时间, < loc > (为识别出来加了空格)描述了具体的链接地址,打开可以获得一个压缩包,下载解压再打开可以看到具体的网页,取其中一段(changefreq可能会出现的更新频率;priority此链接相对于其他链接的优先权比值,值定于0.0 - 1.0之间):
- <url>
<loc>https://music.douban.com/subject/1858957/</loc>
<priority>0.000631481287316</priority>
<changefreq>monthly</changefreq>
</url>
显然要从这一大堆文件里找出我们的目标暂时很麻烦。在有能力对这一长串东西爬取之前,还是只能先相信书了(可以爬取豆瓣电影TOP250)。
2-2 爬虫:豆瓣读书TOP250的所有图书的名称
2-2-1 源码及结果
2-2-2是编写的经历,涉及soup.a.text.strip()(或者豆瓣电影top250源码里的soup.a.scan.text.strip())为什么改写成 i.a.text.replace(’\n’, ‘’)的解释。
源码: