Scrapy在一個頁面抓取一條數(shù)據(jù)較為簡單疹吃。如果在一個頁面上抓取多條數(shù)據(jù),循環(huán)點取在哪里西雀,有一個技巧萨驶。
以簡書首頁為例。如抓取熱門文章艇肴,一條信息包含:作者腔呜、文章標題叁温、閱讀量、評論數(shù)量核畴、喜歡數(shù)膝但、打賞數(shù)。在一個頁面上有多條數(shù)據(jù)谤草。
QQ20160726-2.png
這里實際上跟束,就是把頁面上的數(shù)據(jù)提取出來封裝成一個對象item,只是最后沒有放在集合中丑孩。
items定義
class JsuserItem(Item):
author = Field()
url = Field()
title = Field()
reads = Field()
comments = Field()
likes = Field()
rewards = Field()
提取數(shù)據(jù)循環(huán)點應為包含多條數(shù)據(jù)的一條信息的標簽開始冀宴,分析頁面代碼就是 div>li
QQ20160726-0.png
第一次提取出來的是一整塊的內(nèi)容:(即多條數(shù)據(jù)塊內(nèi)容)
infos = selector.xpath('//li/div')
第二次在這個節(jié)點下提取整塊中的數(shù)據(jù)字段:
author = info.xpath('p/a/text()').extract()
title = info.xpath('h4/a/text()').extract()
QQ20160726-1.png
完整代碼:
def parse(self, response):
selector = Selector(response)
infos = selector.xpath('//li/div')
for info in infos:
item = JsuserItem()
author = info.xpath('p/a/text()').extract()
title = info.xpath('h4/a/text()').extract()
url = info.xpath('h4/a/@href').extract()
reads = info.xpath('div/a[1]/text()').extract()
comments = info.xpath('div/a[2]/text()').extract()
likes = info.xpath('div/span[1]/text()').extract()
#注意有些文章是沒有打賞的
rewards = info.xpath('div/span[2]/text()')
if len(rewards)==1 :
rds = info.xpath('div/span[2]/text()').extract()
rds = int(filter(str.isdigit,str(rds[0])))
else:
rds = 0
item['author']=author
item['title']=title
item['url']='http://www.reibang.com'+url[0]
item['reads']=int(filter(str.isdigit,str(reads[0])))
item['comments']=int(filter(str.isdigit,str(comments[0])))
item['likes']=int(filter(str.isdigit,str(likes[0])))
item['rewards']=rds