【问题标题】:Scrapy not passing scraped urls from parse to callbackScrapy 没有将抓取的 url 从解析传递到回调
【发布时间】: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} 

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    Scrapy 是将您的函数作为回调函数传递。但是,如果您检查您的fragrance_link,您会发现它没有任何价值。我无法弄清楚你要在这里提取什么。

    编辑:

    很遗憾地告诉你,你无法提取它。如果您看到该链接的 HTML 页面。你会发现这个 div 有这个 id div-gpt-ad-1433423286798-2。上面,你可以发现他们正在使用谷歌服务来推送这些数据。如果您尝试提取有关该 div 的任何数据(或绿线)。你可以提取它。绿线以下的任何内容或该 ID 都不会被提取。由于内容是由 JS 加载的。我会建议你尝试 Selenium

    【讨论】:

    • Parse 找到看起来像这样的网址basenotes.net/fragrancedirectory/?house=100361 在这些页面上,我想应用应该返回一个香氛链接的 xpath。如您所见,在该特定页面上,expath 将返回 80 个这样的链接,我在这里只要求第一个,因为它不起作用。
    • @Ryan 请检查我的编辑。我花了一些时间才弄清楚这一点:)
    • 谢谢。我开始质疑我的人生选择。 XD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多