我试图用div元素来刮取一个站点,并且迭代地,对于每个div元素,我想从中刮取一些数据,并跟踪它的子链接,从中刮取更多的数据。你知道吗
这是密码报价.py你知道吗
import scrapy
from ..items import QuotesItem
class QuoteSpider(scrapy.Spider):
name = 'quote'
baseurl='http://quotes.toscrape.com'
start_urls = [baseurl]
def parse(self, response):
all_div_quotes=response.css('.quote')
for quote in all_div_quotes:
item=QuotesItem()
title = quote.css('.text::text').extract()
author = quote.css('.author::text').extract()
tags = quote.css('.tag::text').extract()
author_details_url=self.baseurl+quote.css('.author+ a::attr(href)').extract_first()
item['title']=title
item['author']=author
item['tags']=tags
request = scrapy.Request(author_details_url,
callback=self.author_born,
meta={'item':item,'next_url':author_details_url})
yield request
def author_born(self, response):
item=response.meta['item']
next_url = response.meta['next_url']
author_born = response.css('.author-born-date::text').extract()
item['author_born']=author_born
yield scrapy.Request(next_url, callback=self.author_birthplace,
meta={'item':item})
def author_birthplace(self,response):
item=response.meta['item']
author_birthplace= response.css('.author-born-location::text').extract()
item['author_birthplace']=author_birthplace
yield item
这是密码项目.py你知道吗
import scrapy
class QuotesItem(scrapy.Item):
title = scrapy.Field()
author = scrapy.Field()
tags = scrapy.Field()
author_born = scrapy.Field()
author_birthplace = scrapy.Field()
我运行了命令scrapy crawl quote -o data.json
,但是没有错误消息,data.json
是空的。我希望得到它对应字段中的所有数据。你知道吗
你能帮帮我吗?你知道吗
仔细看看你的日志,你会发现这样的消息:
Scrapy会自动管理重复项,并尝试不访问一个URL两次(原因很明显)。 在这种情况下,您可以将
dont_filter = True
添加到请求中,并将看到如下内容:这确实有点奇怪,因为页面本身会产生请求。你知道吗
总的来说,你可能会得到这样的结果:
相关问题 更多 >
编程相关推荐