web-scraping - 从未调用 RULE 中的 CrawlSpider 回调函数
问题描述
我想使用http://quotes.toscrape.com/ scrapy 2.2
上的所有标签,代码如下
我得到这样的输出:
“调试:已爬网 (200) <GET http://quotes.toscrape.com/tag/classic/page/1/>(参考:http: //quotes.toscrape.com)”。
所以 link_extractor 正在工作,但为什么callback
从未执行?
class MySpider(CrawlSpider):
name = 'quotes'
#allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com']
rules = (
#extract links to tag page
Rule(LinkExtractor(restrict_xpaths=('//div[@class="tags"]')),callback='parse_tag'),
#Rule(LinkExtractor(allow=(r'/author/', )), callback='parse_author')
)
def parse_tag(self,response):
taginfo=ItemLoader(item=tagitem(),response=response)
taginfo.add_xpath('tag','//h3/a/text()')
taginfo.add_xpath('quote','//span[@class="text"]/text()')
return taginfo.load_item()
解决方案
它为我工作。它可以帮助你。
from scrapy.loader import ItemLoader
from scrapy import item, Field
class LinkfinderItem(scrapy.Item):
# define the fields for your item here like:
url = Field()
anchor_text = Field()
class MySpider(CrawlSpider):
name = 'quotesx'
#allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com']
rules = (
#extract links to tag page
Rule(LinkExtractor(restrict_xpaths=('//div[@class="tags"]')), callback='parse_tag'),
#Rule(LinkExtractor(allow=(r'/author/', )), callback='parse_author')
)
def parse_tag(self,response):
tags = response.css('div.tags a.tag')
for tag in tags:
l = ItemLoader(item=LinkfinderItem(),selector=tag)
l.add_value('url', response.url)
l.add_value('anchor_text', response.css('div.tags a.tag::text').extract())
yield l.load_item()
推荐阅读
- electron - 捆绑多个现有项目
- javascript - 如何仅在单击时将字母的颜色更改为白色
- mysql - 查找并分组同一个月的所有记录,相隔 1 年
- reactjs - React:保存状态更新 DOM 但不更新控制台
- jupyter-notebook - Jupyter 中的 Julia:内核错误(“无法在 IJulia 中预编译”)
- entity-framework-core - 如何在 EF Core v3 中进行左外连接
- ios - 将功能添加到 Watch Extension 时 Xcode 崩溃
- r - Closest other Value in the same Vector
- typescript - 在 Jest 和 TypeScript 中使用可选参数模拟函数
- sql - 为存储过程中的变量赋值