专栏名称: python实战
Python实战
目录
相关文章推荐
51好读  ›  专栏  ›  python实战

Scrapy 轻松定制网络爬虫

python实战  · 公众号  · Python  · 2016-12-12 23:36

正文

请到「今天看啥」查看全文


scrapy - ctl .py shell http : / / mindhacks .cn 它会启动 crawler ,把命令行指定的这个页面抓取下来,然后进入 shell ,根据提示,我们有许多现成的变量可以用,其中一个就是 hxs ,它是一个 HtmlXPathSelector ,mindhacks 的 HTML 页面比较规范,可以很方便的直接用 XPath 进行分析。通过 Firebug 可以看到,到每篇 blog 文章的链接都是在 h1 下的,因此在 Shell 中使用这样的 XPath 表达式测试:

In [ 1 ] : hxs .x ( '//h1/a/@href' ) .extract ( )

Out [ 1 ] :

[ u 'http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/' ,

u 'http://mindhacks.cn/2009/05/17/seven-years-in-nju/' ,

u 'http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/' ,

u 'http://mindhacks.cn/2009/03/15/preconception-explained/' ,

u 'http://mindhacks.cn/2009/03/09/first-principles-of-programming/' ,

u 'http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/' ,

u 'http://mindhacks.cn/2009/02/09/writing-is-better-thinking/' ,

u 'http://mindhacks.cn/2009/02/07/better-explained-conflicts-in-intimate-relationship/' ,

u 'http://mindhacks.cn/2009/02/07/independence-day/' ,

u 'http://mindhacks.cn/2009/01/18/escape-from-your-shawshank-part1/' ]

这正是我们需要的 URL ,另外,还可以找到“下一页”的链接所在,连同其他几个页面的链接一同在一个 div 里,不过“下一页”的链接没有 title 属性,因此 XPath 写作 / / div [ @ class = "wp-pagenavi" ] / a [ not ( @ title ) ] 不过如果向后翻一页的话,会发现其实“上一页”也是这样的,因此还需要判断该链接上的文字是那个下一页的箭头 u'\xbb' ,本来也可以写到 XPath 里面去,但是好像这个本身是 unicode escape 字符,由于编码原因理不清楚,直接放到外面判断了,最终 parse 函数如下:

def parse ( self , response ) :

items = [ ]

hxs = HtmlXPathSelector ( response )

posts = hxs . x ( '//h1/a/@href' ) . extract ( )

items . extend ( [ self . make_requests_from_url







请到「今天看啥」查看全文