天天看点

pyspider的使用

你还应该至少对万维网是什么有一个简单的认识:

所以,爬网页实际上就是:

找到包含我们需要的信息的网址(url)列表

通过 http 协议把页面下载回来

从页面的 html 中解析出需要的信息

找到更多这个的 url,回到 2 继续

既然我们要爬所有的电影,首先我们需要抓一个电影列表,一个好的列表应该:

包含足够多的电影的 url

通过翻页,可以遍历到所有的电影

一个按照更新时间排序的列表,可以更快抓到最新更新的电影

<a target="_blank" href="http://movie.douban.com/tag/">http://movie.douban.com/tag/</a>

在 pyspider 的 dashboard 的右下角,点击 "create" 按钮

pyspider的使用

替换 <code>on_start</code> 函数的 <code>self.crawl</code> 的 url:

<code>self.crawl</code> 告诉 pyspider 抓取指定页面,然后使用 <code>callback</code> 函数对结果进行解析。

点击绿色的 <code>run</code> 执行,你会看到 <code>follows</code> 上面有一个红色的 1,切换到 <code>follows</code> 面板,点击绿色的播放按钮:

pyspider的使用
由于 电影列表页和 tag列表页长的并不一样,在这里新建了一个 <code>callback</code> 为 <code>self.list_page</code> <code>@config(age=10 * 24 * 60 * 60)</code> 在这表示我们认为 10 天内页面有效,不会再次进行更新抓取

由于 pyspider 是纯 python 环境,你可以使用 python 强大的内置库,或者你熟悉的第三方库对页面进行解析。不过更推荐使用 css选择器。

再次点击 <code>run</code> 让我们进入一个电影列表页(<code>list_page</code>)。在这个页面中我们需要提取:

下一页的链接,用来翻页

在 pyspider 中,还内置了一个 <code>css selector helper</code>,当你点击页面上的元素的时候,可以帮你生成它的 css选择器 表达式。你可以点击

<code>enable css selector helper</code> 按钮,然后切换到 <code>web</code> 页面:

pyspider的使用

开启后,鼠标放在元素上,会被黄色高亮,点击后,所有拥有相同 css选择器 表达式的元素会被高亮。表达式会被插入到 python 代码当前光标位置。创建下面的代码,将光标停留在单引号中间:

点击一个电影的链接,css选择器 表达式将会插入到你的代码中,如此重复,插入翻页的链接:

翻页是一个到自己的 <code>callback</code> 回调

再次点击 <code>run</code>,follow 到详情页。使用 <code>css selector helper</code> 分别添加电影标题,打分和导演:

pyspider的使用

右键点击需要提取的元素,点击审查元素。你并不需要像自动生成的表达式那样写出所有的祖先节点,只要写出那些能区分你不需要的元素的关键节点的属性就可以了。不过这需要抓取和网页前端的经验。所以,学习抓取的最好方法就是学会这个页面/网站是怎么写的。

你也可以在 chrome dev tools 的 javascript console 中,使用 <code>$$(a[rel="v:directedby"])</code> 测试 css selector。

使用 <code>run</code> 单步调试你的代码,对于用一个 <code>callback</code> 最好使用多个页面类型进行测试。然后保存。

回到 dashboard,找到你的项目

将 <code>status</code> 修改为 <code>debug</code> 或 <code>running</code>

按 <code>run</code> 按钮

pyspider的使用