首页 > 编程问答 >为什么我的蜘蛛提取的物品数量有限

为什么我的蜘蛛提取的物品数量有限

时间:2024-08-02 16:51:42浏览次数:13  
标签:python web-scraping scrapy infinite-scroll

例如,当我使用网站“https://en.zalando.de/men-shoes-boots/”时,仅抓取了 37 个项目。我知道需要某种类型的分页才能到达下一页,但在第一页本身有远远超过 37 个项目,而且我似乎无法弄清楚为什么脚本在 37 处停止。

任何帮助我将非常感激!!

我的蜘蛛元素查找器看起来像这样:

class ZalandoSpider (scrapy.Spider):
    name = 'zalando'
    start_urls = [
        'https://en.zalando.de/men-shoes-boots/'
    ]

def parse(self,response):

    alle_elementen = response.css('.DvypSJ')
    print('length=' + str(len(alle_elementen)))

可能与无限滚动有关,但我已经检查网络页面超过2小时了,但没有结果。


你提到的问题很常见,当网站使用 JavaScript 动态加载内容而 Scrapy 默认只获取初始 HTML 内容时,就会出现这种情况。 Zalando 网站看起来确实使用了无限滚动,这意味着当你滚动页面时,会加载更多的产品。

你的 Scrapy 蜘蛛只找到 37 个产品,因为它只查看了初始 HTML 源代码。 .css('.DvypSJ') 选择器在初始响应中只找到 37 个匹配项。

为了抓取所有产品,你需要一种方法来处理这种动态加载的内容。以下是一些选项:

1. 使用 Splash 渲染 JavaScript

Splash 是一个 JavaScript 渲染服务,可以与 Scrapy 集成。它可以渲染页面并执行 JavaScript,从而加载所有产品。

  • 首先,你需要安装 Splash 并启动 Splash 服务。
  • 然后,你需要安装 scrapy-splash bash pip install scrapy-splash
  • 在你的 Scrapy 项目中启用 Splash 中间件,并在 settings.py 文件中配置 Splash 服务器地址: ```python DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, }

SPLASH_URL = 'http://localhost:8050' * 最后,修改你的蜘蛛,使用 `SplashRequest` 代替 `Request` 来获取页面内容: python import scrapy from scrapy_splash import SplashRequest

class ZalandoSpider(scrapy.Spider): name = 'zalando' start_urls = ['https://en.zalando.de/men-shoes-boots/']

   def start_requests(self):
       for url in self.start_urls:
           yield SplashRequest(url, self.parse, 
                              args={'wait': 5},
                              endpoint='render.html')

   def parse(self, response):
       alle_elementen = response.css('.DvypSJ')
       print('length=' + str(len(alle_elementen)))
       # ... 其他解析逻辑 ...

```

2. 使用 Selenium 或 Playwright

Selenium 和 Playwright 是浏览器自动化工具,可以模拟用户交互,如滚动和点击。你可以使用它们加载所有产品,然后使用 Scrapy 解析 HTML 内容。

  • 选择 Selenium 或 Playwright,并安装相应的 Python 库。
  • 在你的蜘蛛中,使用 Selenium 或 Playwright 打开页面,滚动到底部,直到加载所有产品,然后将页面源代码传递给 Scrapy 进行解析。

3. 分析网络请求

通过分析网络请求,你可以找到加载更多产品的 API 调用。你可以使用浏览器的开发者工具(Network 标签)来观察网络请求。找到 API 调用后,你可以直接向 API 发送请求,获取产品数据。

选择哪种方法取决于你的需求和技术水平。

  • 如果你需要处理复杂的 JavaScript 逻辑,Splash 或 Selenium/Playwright 是更好的选择。
  • 如果你只需要处理无限滚动,分析网络请求可能会更简单。

希望这些信息能帮助你抓取 Zalando 网站上的所有产品!

标签:python,web-scraping,scrapy,infinite-scroll
From: 66495211

相关文章

  • 如何使用 Python 在 2D 曲面上切割 3D 体积?
    考虑3D中的闭合表面网格(mesh1),由两个合并块组成,如图所示。两个合并块,具有不同颜色的细分补丁。网格以STL文件形式给出,并被细分分成不同的补丁。每个面片都在STL文件中保存为单独的实体。此外,我有一个由STL文件给出的弯曲2D表面网格(......
  • Python教程(十):面向对象编程(OOP)
    目录专栏列表前言一、面向对象编程概述1.1类和对象1.2继承1.3多态1.4封装二、Python中的类和对象2.1定义类2.2`__init__`函数解释2.3创建对象三、继承3.1基本继承3.2创建子类对象四、多态五、封装六.访问限制七、综合实例结语专栏列表Python教程(一):环......
  • Qt C++ 调用 Python 之 PyObject* 数据类型转换
    整数:PyLong_FromLong和PyLong_AsLong类型检查函数:PyLong_Check()intcppInt=42;//C++整数转换为Python整数对象PyObject*pyInt=PyLong_FromLong(cppInt);//Python整数对象转换为C++整数longcppIntFromPy=PyLong_AsLong(pyInt);Py_DECREF(pyInt)......
  • Python 警告:重试(重试(总计=4,连接=无,读取=无,重定向=无,状态=无))
    我正在尝试pipinstall--upgradepip并保持收到此错误:WARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))afterconnectionbrokenby'ProxyError('Cannotconnecttoproxy.',NewConnectionError('<......
  • {Python} 有没有办法从函数中“提取”返回值变量并在其他地方使用它,而不调用原始函数?
    第一次在这里发帖。对python来说相对较新,我正在开发一个程序,它基本上是一个随机故事生成器,用于学习语言、发展技能并添加到我的投资组合中。我有一个主文件(最初启动该程序)、一个简介文件(对于介绍部分,获取用户名以及我试图“提取”user_name变量的位置),一个函数文件,其中包......
  • 为什么我在 Python 中的 Skip-Gram 实现会产生不正确的结果?
    我正在使用Python实现Word2Vec的Skip-Gram模型。然而,正如生成的嵌入及其可视化所示,我的模型似乎无法正常工作。这是嵌入的3D图的示例,它显示单词聚集在一起并重叠,因此很难区分它们:我怀疑问题在于我的实现而不是绘图函数。importnumpyasnpfromnltk.corpusimpor......
  • 基于SpringBoot的智能购房推荐系统-09040(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    Springboot智能购房推荐系统摘 要近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。智......
  • Python 基础教学 - 开发规范
    Python基础教学-开发规范一、引言在Python编程中,遵循良好的开发规范是编写高质量、可维护代码的关键。本文将为您详细介绍Python开发中的一些重要规范,帮助您养成良好的编程习惯。二、代码布局缩进使用4个空格进行缩进,避免使用制表符。示例:ifTrue:p......
  • Python基础学习笔记(一)
    文章目录一、下载Python二、变量三、数据类型四、运算符五、语句六、容器类型七、函数function八、常用API九、面向对象类的创建:创建对象:实例成员:实例方法:类成员:静态方法:十、三大特征:封装、继承、多态十一、六大原则:Python基础学习笔记(二)一、下载Python官网:https......
  • 随机森林的可解释性分析(含python代码)
    随机森林的可解释性分析1.引言可解释性的重要性2.随机森林的原理2.1基本原理:2.2随机森林的实现3.随机森林的可解释性分析3.1特征重要性3.2特征重要性3.3SHAP值3.4部分依赖图(PDP)3.5交互特征效应3.6变量依赖图4.结论5.参考文献1.引言在机器学习领域,随机森林......