【发布时间】:2020-05-21 01:12:24
【问题描述】:
Parse_brand 是问题所在。它什么也不返回,目前也没有抓取任何 url,即使 parse 工作得很好并且应该提供超过 4,000 个 url。我是scrapy的新手;文档没有帮助。有什么想法吗?
我确认 parse 方法的工作原理是让它从抓取的页面中生成一个数据字典,包括我想要的 href 属性。然后我写了一个简单的请求,我希望告诉蜘蛛跟踪它找到的每个 URL,然后调用parse_brand 函数从这些页面中提取更多的 URL。回调的输出是 {'f':[]} 形式的空字典。
import scrapy
import re
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors.lxmlhtml import LxmlLinkExtractor
from scrapy.item import Item, Field
from collections import deque
class PageContentLink(Item):
url = Field()
class FragranceSpider(CrawlSpider):
name = "number5"
start_urls = ['http://www.basenotes.net/brand/']
allowed_domains = ['basenotes.net']
def parse(self, response):
all_brand_links = response.xpath('//*[@id="contentbn"]/div[4]/div/ul/li')
for brand in all_brand_links:
if brand.xpath('.//a[2]'):
href = brand.xpath('.//a[2]/@href').extract_first()
else:
href = brand.xpath('.//a/@href').extract_first()
yield scrapy.Request(href, callback=self.parse_brand)
def parse_brand(self, response):
fragrance_link = response.xpath('//*[@id="contentbn"]/div[6]/div[2]/table/tbody/tr/td/h3/a/@href').extract_first()
yield {'f': fragrance_link}
【问题讨论】: