scrapy分页抓取网页(-2.png页面抓取一条数据较为简单(图)信息 )
优采云 发布时间: 2022-04-20 02:27scrapy分页抓取网页(-2.png页面抓取一条数据较为简单(图)信息
)
Scrapy 在页面上抓取一条数据相对简单。如果您在一个页面上抓取多条数据,则有一个技巧可以确定循环点的位置。
以简书首页为例。比如抢热门文章,一条信息包括:作者、文章标题、浏览量、评论数、点赞数、打赏数。一页上有多条数据。
-2.png
其实就是把页面上的数据提取出来封装成一个object item,但是最后没有放到采集里面。
物品定义
class JsuserItem(Item):
author = Field()
url = Field()
title = Field()
reads = Field()
comments = Field()
likes = Field()
rewards = Field()
提取数据的循环点应以收录一条信息和多条数据的标签开头,分析页面代码为div>li
-0.png
第一次提取的是一整块内容:(即多个数据块的内容)
infos = selector.xpath('//li/div')
第二次提取该节点下整个区块中的数据字段:
author = info.xpath('p/a/text()').extract()
title = info.xpath('h4/a/text()').extract()
-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.jianshu.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