【问题标题】:Scrape nested URLs using Scrapy使用 Scrapy 抓取嵌套的 URL
【发布时间】:2017-02-15 11:03:24
【问题描述】:

我正在尝试抓取此网页:

https://www.grohe.com/in/7780/bathroom/bathroom-faucets/essence/

我尝试了不同的方法,但每次都会出现语法错误。我不太了解 Python 和 Scrapy。谁能帮帮我?

我的要求是:

  • 在页面的页眉部分,有一张背景图片、一些描述和两张与产品相关的图片。

  • 产品范围部分有一些图片。我想浏览所有图片并抓取各个产品的详细信息。

结构是这样的:

到目前为止,这是我的代码:

import scrapy
class QuotesSpider(scrapy.Spider):
    name = "plumber"
    start_urls = [
        'https://www.grohe.com/in/7780/bathroom/bathroom-faucets/essence/',
    ]

def parse(self, response):
    for divs in response.css('div#product-variants div.viewport div.workspace div.float-box'):
        yield {
            #response.css('div#product-variants a::attr(href)').extract()
            'producturl': divs.css('a::attr(href)').extract(),
            'imageurl': divs.css('a img::attr(src)').extract(),
            'description' : divs.css('a div.text::text').extract() + divs.css('a span.nowrap::text').extract(),
             next_page = producturl
             next_page = response.urljoin(next_page)
             yield scrapy.Request(next_page, callback=self.parse)
        }

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    您应该从您的项目中取出 next_page 产量。
    一般来说,您可以遍历产品,进行一些负载并将其传递到您请求的 meta 参数中,如下所示:

    def parse(self, response):
        for divs in response.css('div#product-variants div.viewport div.workspace div.float-box'):
            item = {'producturl': divs.css('a::attr(href)').extract(),
                    'imageurl': divs.css('a img::attr(src)').extract(),
                    'description' : divs.css('a div.text::text').extract() + divs.css('a span.nowrap::text').extract()}
             next_page = response.urljoin(item['producturl'])
             yield scrapy.Request(next_page, callback=self.parse_page, meta={'item': item})
    
    def parse_page(self, response):
        """This is individual product page"""
        item = response.meta['item']
        item['something_new'] = 'some_value'
        return item
    

    【讨论】:

    • 达到此类型要求的项目是强制性的吗?你能推荐任何好的网站来废弃这些类型的嵌套 url 抓取
    • 我按照上面的方法,在抓取url后创建了空的json文件。在控制台中间** grohe.com/in/7780/bathroom/bathroom-faucets/essence> (referer: None) 2017-02-15 17: 29:51 [scrapy] 错误:Spider 错误处理 grohe.com/in/7780/bathroom/bathroom-faucets/essence>(引用者:无)回溯(最后一次调用):文件“/usr/lib/python2.7/dist-packages/scrapy/utils/defer .py”,第 102 行,在 iter_errback 中产生 next(it) 文件“/usr/lib/python2.7/dist-packages/scrapy/spidermiddlewares/offsite.py”,第 28 行,在 process_spid 中**
    • @pradeep 试试我的编辑,如果它再次发生,你能在某种 pastebin 中发布完整的错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多