码迷,mamicode.com
首页 > 编程语言 > 详细

Python爬虫Scrapy框架入门(3)

时间:2016-07-21 23:45:26      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:

往往需要爬取的网页是呈一个树状结构。比如,需要先爬取一个目录,然后再在目录中选择具体的爬取目标。而目录和具体目标之间,网页结构不同,使得我们不能使用相同的爬取策略。

从之前的经验来看,我们对scrapy进行操作是从Spider的Parse()函数作为入口。不如在parse()函数中对对目录进行操作,获取相应目标的url,再进一步爬取具体内容。

代码如下:

 1 class ZhangzishiSpider(scrapy.Spider):
 2     name = zhangzishi
 3     allowed_domains = [http://www.zhangzishi.cc/]
 4     start_urls = [http://www.zhangzishi.cc/category/welfare]
 5 
 6     def parse_art(self, response):
 7         imgs = ZhangzishiArtItem()
 8         imgs[img_urls] = response.xpath(//article//img//@src).extract()
 9         yield imgs
10 
11     def parse(self, response):
12         url_list_item = ZhangzishiListItem()
13         url_list_item[art_urls] = response.xpath(//article[@class="excerpt"]//h2//a[@target="_blank"]//@href).extract()
14         #yield url_list_item
15         for url in url_list_item[art_urls]:
16             if url:
17                 print analysing article:\t + url
18                 yield scrapy.Request(url, callback=self.parse_art, dont_filter=True)

对于parse,每次获取item之后,通过yield发出新的request,获取具体的爬取目标,再在parse_art函数中对相应的response进行处理

其实改动不是特别大。只是更深层次理解了这样几点:

  1. 首先,scrapy是根据start_urls中的url,获取第一个response,进入parse()
  2. 我们爬取到二层url之后,返回response可以指定处理函数
  3. 通过yield抛出相应的item,进入pipeline进行处理

Python爬虫Scrapy框架入门(3)

标签:

原文地址:http://www.cnblogs.com/flowingcloud/p/5693372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!