Skip to content

YieldNull/douban

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

统计豆瓣电影条目

使用Scrapy,共爬取362622条影视信息。其中电影139784条,电视剧综艺等222838条。

首先通过年份标签 https://www.douban.com/tag/2016/?focus=movie 页面中的XHRAPI获取从1888年到现在的一些电影作为seeds。 然后爬取每个电影详情页面中的推荐电影,最后通过演职人员参与的作品进行查漏。

LICENSE

MIT License

更新日志

2015.12.15

Switch to multiprocessing, and the amount is the same, 80608.

2015.12.14

Got 80608 entries using threadpool.

But encountered the same bug as all3g did.

It may have lost some entries due to this bug.

原则

主要是通过AJAX来获取电影信息,因为直接访问HTML源码太花时间了。而且直接访问API跟直接访问网页的被封概率应该不一样吧?

原理

首先通过tag搜索已有年份标签的电影,范围为[1888,current_year]

http://www.douban.com/tag/2015/?focus=movie

上面是获取The URL of AJAX的链接,在调试窗口就可以看到其链接为

http://www.douban.com/j/tag/items?start=9&limit=6&topic_id=65330&topic_name=2015&mod=movie

通过limit可以控制每次返回数据量。

可以发现,该链接中含有topic_id字段,这个id是未知的,因此只好到标签搜索结果的HTML源码中找。有时候可以在源码中直接找到payload信息,然后从中提取topic_id,但是有时候找不到。找不到时,可以获取下面的js文件,在其中可以找到payload信息。

有且只有一个匹配

pattern=scrapy

从js文件提取或直接从HTML源码获取

var payload = {
    start: start,
    limit: limit,
    topic_id: 65330,
    topic_name: '2015',
    mod: mod_name
};

Request Header:

'Accept':'*/*''Accept-Encoding':'gzip, deflate, sdch''Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4''Connection':'keep-alive''Referer':scrapy'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36''X-Requested-With':'XMLHttpRequest'

其中Referer是变化的。为了最真实的模拟浏览器的请求,这些Headers都会包含在请求中。

此法可以获取电影(或电视剧、动画等)的subject_id,然后访问详情页进一步爬取信息。

XHR返回的json数据中提取id:

ptn = scrapy

查漏

然而有的电影并没有年份标签,因此可以获取到电影的演员列表,然后再获取演员参演过的电影来查漏。作品列表仍然不全,若不是主角可能被忽略。而且国外演员被标签的不全。

http://www.douban.com/tag/苏有朋/?focus=movie

妥协

因此可以直接进入演员详情页,演员id可以在获取演员列表时获取。(主演一般都有链接,链接中包含id)

http://movie.douban.com/celebrity/1050540/movies?start=0&format=pic&sortby=time&role=A

这东西是翻页的,每次都会请求HTML源码。每页10条,总条数可以从源码获取。比如下面的。不过感觉会好慢好慢。而且会不会要求登陆?

<title>
苏有朋 Alec Su的演出作品(47)
</title>

Tricks

有些条目不登陆不显示,比如蓝宇。用XHRAPI倒是爬到其链接了,但是要爬详情时还是得进入详情页,因而后续有搞个小号登陆的必要。