当前位置: 首页 > 面试题库 >

使用scrapy获取URL列表,然后在这些URL中抓取内容

全丰
2023-03-14
问题内容

我需要一个Scrapy Spider来为每个URL(30个产品,所以30个URL)抓取以下页面(https://www.phidgets.com/?tier=1&catid=64&pcid=57),然后通过该URL进入每个产品并抓取其中的数据。

我的第二部分完全按照我的意愿工作:

import scrapy

class ProductsSpider(scrapy.Spider):
    name = "products"
    start_urls = [
        'https://www.phidgets.com/?tier=1&catid=64&pcid=57',
    ]

    def parse(self, response):
        for info in response.css('div.ph-product-container'):
            yield {
                'product_name': info.css('h2.ph-product-name::text').extract_first(),
                'product_image': info.css('div.ph-product-img-ctn a').xpath('@href').extract(),
                'sku': info.css('span.ph-pid').xpath('@prod-sku').extract_first(),
                'short_description': info.css('div.ph-product-summary::text').extract_first(),
                'price': info.css('h2.ph-product-price > span.price::text').extract_first(),
                'long_description': info.css('div#product_tab_1').extract_first(),
                'specs': info.css('div#product_tab_2').extract_first(),
            }

        # next_page = response.css('div.ph-summary-entry-ctn a::attr("href")').extract_first()
        # if next_page is not None:
        #     yield response.follow(next_page, self.parse)

但是我不知道如何做第一部分。如你所见,我将主页(https://www.phidgets.com/?tier=1&catid=64&pcid=57)设置为start_url。但是,如何获取我需要抓取的所有30个网址填充到start_urls列表中呢?


问题答案:

我目前无法测试,所以请告诉我这是否对你有用,因此如果有任何错误,我可以对其进行编辑。

这里的想法是,我们在首页中找到每个链接,并通过将你的产品解析方法作为回调传递新的scrapy请求

import scrapy
from urllib.parse import urljoin

class ProductsSpider(scrapy.Spider):
    name = "products"
    start_urls = [
        'https://www.phidgets.com/?tier=1&catid=64&pcid=57',
    ]

    def parse(self, response):
        products = response.xpath("//*[contains(@class, 'ph-summary-entry-ctn')]/a/@href").extract()
        for p in products:
            url = urljoin(response.url, p)
            yield scrapy.Request(url, callback=self.parse_product)

    def parse_product(self, response):
        for info in response.css('div.ph-product-container'):
            yield {
                'product_name': info.css('h2.ph-product-name::text').extract_first(),
                'product_image': info.css('div.ph-product-img-ctn a').xpath('@href').extract(),
                'sku': info.css('span.ph-pid').xpath('@prod-sku').extract_first(),
                'short_description': info.css('div.ph-product-summary::text').extract_first(),
                'price': info.css('h2.ph-product-price > span.price::text').extract_first(),
                'long_description': info.css('div#product_tab_1').extract_first(),
                'specs': info.css('div#product_tab_2').extract_first(),
            }


 类似资料:
  • 问题内容: 如何在Scrapy 函数中获取请求网址?我有很多网址,其中一些将我的蜘蛛重定向到主页,结果我有一个空项目。所以我需要一些类似的东西来存储这些URL。我正在使用BaseSpider。 问题答案: 传递给parse()的’response’变量具有所需的信息。你不需要覆盖任何内容。 例如。(编辑)

  • 问题内容: 免责声明:我在StackOverflow上看到过许多其他类似的帖子,并尝试以相同的方式进行操作,但是它们似乎在此网站上不起作用。 我正在使用Python-Scrapy从koovs.com获取数据。 但是,我无法获得动态生成的产品尺寸。具体来说,如果有人可以引导我从此链接的下拉菜单中获取“不可用”尺寸标签,我将不胜感激。 我可以静态获取尺寸列表,但这样做只能得到尺寸列表,但不能获得其中的

  • 问题内容: 使用Express框架时,如何在Node中下载URL的内容?基本上,我需要完成Facebook身份验证流程,但是如果没有获取其OAuth令牌URL,就无法做到这一点。 通常,在PHP中,我会使用Curl,但是Node等效项是什么? 问题答案: http://nodejs.org/docs/v0.4.11/api/http.html#http.get

  • 我正在尝试获取背景图像:url('XXX'); 这就是我获取所有内联css的方法 有人能帮我只得到背景图像的url吗。谢谢 null null

  • 嘿,在C#中使用Selenium和NUnit测试和chrome的伙计们,我如何从谷歌搜索的第一页中获得列表中的所有主要URL(web URL),然后从该列表中获得指定URL的索引号?

  • 我有上面的编码来提取使用硒 - 蟒蛇的href链接。我想提取每个人的个人资料“董事会成员”中的内容。我知道如何逐个提取它们,但不知道如何编写循环来执行此操作。 以下是我的代码: 任何想法都很感谢!

  • 1.5. 获取URL 对于很多现代应用来说,访问互联网上的信息和访问本地文件系统一样重要。Go语言在net这个强大package的帮助下提供了一系列的package来做这件事情,使用这些包可以更简单地用网络收发信息,还可以建立更底层的网络连接,编写服务器程序。在这些情景下,Go语言原生的并发特性(在第八章中会介绍)显得尤其好用。 为了最简单地展示基于HTTP获取信息的方式,下面给出一个示例程序fe

  • 问题内容: 您如何使用Scrapy抓取返回JSON的Web请求?例如,JSON如下所示: 我将要抓取特定的项目(例如和在上面)并保存到csv。 问题答案: 这与使用Scrapy的html响应相同。唯一的区别是您应该使用模块来解析响应: 希望有帮助。