如何无限滚动抓取网站?

2023-11-27

我想爬行这个网站。我写了一个蜘蛛,但它只爬首页,即前 52 项。

我试过这段代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
a=[]
from aqaq.items import aqaqItem
import os
import urlparse
import ast

    class aqaqspider(BaseSpider):
        name = "jabong"
        allowed_domains = ["jabong.com"]
        start_urls = [
            "http://www.jabong.com/women/clothing/womens-tops/",
        ]

        def parse(self, response):
            # ... Extract items in the page using extractors
                    n=3
                    ct=1

                    hxs = HtmlXPathSelector(response)
                    sites=hxs.select('//div[@id="page"]')
                    for site in sites:
                            name=site.select('//div[@id="content"]/div[@class="l-pageWrapper"]/div[@class="l-main"]/div[@class="box box-bgcolor"]/section[@class="box-bd pan mtm"]/ul[@id="productsCatalog"]/li/a/@href').extract()
                            print name
                            print ct
                            ct=ct+1
                            a.append(name)
                    req= Request (url="http://www.jabong.com/women/clothing/womens-tops/?page=" + str(n) ,
                    headers = {"Referer": "http://www.jabong.com/women/clothing/womens-tops/",
                            "X-Requested-With": "XMLHttpRequest"},callback=self.parse,dont_filter=True)

                    return req # and your items

它显示以下输出:

2013-10-31 09:22:42-0500 [jabong] DEBUG: Crawled (200) <GET http://www.jabong.com/women/clothing/womens-tops/?page=3> (referer: http://www.jabong.com/women/clothing/womens-tops/)
2013-10-31 09:22:42-0500 [jabong] DEBUG: Filtered duplicate request: <GET http://www.jabong.com/women/clothing/womens-tops/?page=3> - no more duplicates will be shown (see DUPEFILTER_CLASS)
2013-10-31 09:22:42-0500 [jabong] INFO: Closing spider (finished)
2013-10-31 09:22:42-0500 [jabong] INFO: Dumping Scrapy stats:

当我把dont_filter=True它永远不会停止。


Yes, dont_filter必须在这里使用,因为只有pageXHR 请求中的 GET 参数更改为http://www.jabong.com/women/clothing/womens-tops/?page=X每次将页面向下滚动到底部时。

现在你需要弄清楚如何停止爬行。这其实很简单——只需检查队列中下一页上没有产品的时间并提高CloseSpider例外.

这是一个适合我的完整代码示例(停在第 234 页):

import scrapy
from scrapy.exceptions import CloseSpider
from scrapy.spider import BaseSpider
from scrapy.http import Request


class Product(scrapy.Item):
    brand = scrapy.Field()
    title = scrapy.Field()


class aqaqspider(BaseSpider):
    name = "jabong"
    allowed_domains = ["jabong.com"]
    start_urls = [
        "http://www.jabong.com/women/clothing/womens-tops/?page=1",
    ]
    page = 1

    def parse(self, response):
        products = response.xpath("//li[@data-url]")

        if not products:
            raise CloseSpider("No more products!")

        for product in products:
            item = Product()
            item['brand'] = product.xpath(".//span[contains(@class, 'qa-brandName')]/text()").extract()[0].strip()
            item['title'] = product.xpath(".//span[contains(@class, 'qa-brandTitle')]/text()").extract()[0].strip()
            yield item

        self.page += 1
        yield Request(url="http://www.jabong.com/women/clothing/womens-tops/?page=%d" % self.page,
                      headers={"Referer": "http://www.jabong.com/women/clothing/womens-tops/", "X-Requested-With": "XMLHttpRequest"},
                      callback=self.parse, 
                      dont_filter=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何无限滚动抓取网站? 的相关文章

  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成

随机推荐

  • OpenMP - 仅创建一次线程

    我尝试使用 OpenMP 编写简单的应用程序 不幸的是我在加速方面遇到问题 在此应用程序中 我有一个 while 循环 该循环体由一些应按顺序执行的指令和一个 for 循环组成 我用 pragma omp parallel for使这个 f
  • Actor设计模式和现实世界的例子

    我目前正在学习 Actor 设计模式 或者模型 它看起来很有趣 然而 我正在努力寻找任何像样的现实世界示例来说明如何或在何处应用此模型 除了带有余额的简单银行帐户或游戏的敌人坐标等的基本示例之外 作为我研究的一部分 我遇到了一个示例电子商务
  • Asp.net MVC 设置验证日期格式在 Chrome 上失败

    我在 asp net mvc 中设置验证日期格式 Chrome 时遇到问题 对于 IE Firefox 等其他浏览器可以正常工作 我在模型中定义了日期 如下代码所示 Required Display Name Data fi publica
  • 与sql server中的“top”相反,不使用order by,没有键/索引

    我想从 SQL Server 表中检索最后 10 个结果 我希望它们是最后插入的 10 条记录 我该怎么做 我想写select bottom 10 from mytable然而这并不存在 据我所知 我想要插入最后 10 行 没有时间戳 你不
  • Bootstrap 模态远程源错误处理

    我们正在使用Bootstrap Modal window显示一些通过远程源加载的 html 我们正在通过以下推荐的方式执行此操作Bootstrap文档 通过使用选项remote并传递给它一个url 正如所描述的here 例如 id moda
  • Android 在上传到服务器之前压缩视频

    如何在上传到远程服务器之前在 Android 中压缩视频文件 我不想压缩该文件 因为我认为这不会有太大帮助 我想压缩视频并以较低的比特率或分辨率重新编码 我们的想法是从每个设备获取标准的 360 480 30 FPS 视频文件 这样我就可以
  • 仅限 css 复选框(带有内容属性)

    如何仅使用 css 无 JS 无 JQ 制作自定义复选框 选中时内容为 on 未选中时内容为 off Thanks reedit 好的 经过大量复制 粘贴 删除之后 现在可以了 Thank input type checkbox posit
  • Spring @RequestBody 继承

    我读过几篇试图解释这一点的帖子 但我无法让它发挥作用 我有一个场景 输入JSON我的服务可以有几个子类型 基本上 我有一个基类UserDto进而ClientDto and OwnerDto两者都延伸自UserDto 我希望控制器能够解析具体
  • 将 ActionListener 添加到 JList

    我有一个带有字符串数组的 JList 基本上它显示餐厅菜单 在 JList 旁边 我有另一个空的 JList 每当用户双击第一个 JList 显示菜单的位置 中的字符串时 我希望它显示在紧邻的下一个 JList 上 我怎么做 你可以试试 f
  • 在 iOS 中使用多个 Storyboard

    我的目标是创建一个选项卡式应用程序 然后在单独的故事板中构建每个选项卡的视图 我的主故事板是一个选项卡视图 Then I create a secondary storyboard storyboard 2 with 2 View Cont
  • 如何在python中计算两点之间的直线的坐标?

    如何获取python中两点之间的所有坐标点 例如 我有一个点的坐标为 x1 y1 另一个点的坐标为 x10 y10 我需要它们之间的所有点 在本例中例如 x2 y2 x9 y9 非常感谢您的帮助 他们全部 有无数个 You can 计算这两
  • 无法安装 JSON gem

    我需要安装 json 因为我收到此错误 Could not find json 1 4 6 in any of the sources I ran gem install json and bundle install但我只能在需要 jso
  • 使用 ReactiveUI 中的代码隐藏在 ListBox 内绑定数据

    我有 WPF 列表框
  • OpenCV 确定相交/重叠区域

    我正在使用 OpenCV 和 python 创建一个拼接程序 目前正在很好地拼接图像 现在正在尝试将它们混合在一起 最终目标是使用图形切割来更好地缝合它们 但现在我只是根据发现的单应性重叠图像 Here is a photo of my c
  • px、dip、dp 和 sp 有什么区别?

    计量单位之间有什么区别 px dip dp 和 sp 来自Android 开发者文档 px Pixels corresponds to actual pixels on the screen in Inches based on the p
  • Lato 字体在 IE 和 Firefox 中缺少字母

    Lato Google 托管 不确定字体 字体是怎么回事 在 IE 8 上 字体看起来很混乱 缺少字母和单词空格 而且我听说早期 不是那么早期 版本的 Firefox 也是如此 当您无法在许多浏览器上阅读字体 或托管字体时 它有什么意义 拉
  • 需要一个正则表达式来排除某些字符串

    我正在尝试获取一个匹配的正则表达式 somefile 1 txt somefile 2 txt somefile anything txt 但不匹配 somefile 16 txt I tried somefile 16 txt 运气不好
  • 要么或需要验证

    我想使用 ComponentModel DataAnnotations 验证两个属性中至少之一具有值 我的模型看起来像这样 public class FooModel public string Bar1 get set public in
  • Flutter 中的滑动视图

    我正在尝试在 flutter 中制作类似于谷歌 苹果地图屏幕的东西 我刚刚开始在 Flutter 中进行实验 我很难理解 可拖动小部件 有人可以给我他们如何制作幻灯片视图的示例代码 我可以学习吗 我找不到 还有向上滑动面板您可以使用 Flu
  • 如何无限滚动抓取网站?

    我想爬行这个网站 我写了一个蜘蛛 但它只爬首页 即前 52 项 我试过这段代码 from scrapy spider import BaseSpider from scrapy selector import HtmlXPathSelect