使用回发数据抓取页面 javascript Python Scrapy

2023-11-25

我正在通过 Scrapy 使用 ASP.NET 编程爬行一些目录。

要爬行的页面编码如下:

javascript:__doPostBack('ctl00$MainContent$List','Page$X')

其中 X 是 1 到 180 之间的整数。MainContent 参数始终相同。我不知道如何爬进这些。我很想在 SLE 规则中添加一些简单的内容allow=('Page$') or attrs='__doPostBack',但我的猜测是,我必须更加狡猾才能从 javascript“链接”中提取信息。

如果更容易从 JavaScript 代码中“取消屏蔽”每个绝对链接并将其保存到 csv,然后使用该 csv 将请求加载到新的抓取工具中,也没关系。


这种分页并不像看上去那么简单。解决这个问题是一个有趣的挑战。下面提供了有关解决方案的几个重要注意事项:

  • 这里的想法是逐页跟随分页,在当前页面周围传递Request.meta字典
  • using a regular BaseSpider因为分页涉及一些逻辑
  • 重要的是要提供headers冒充真正的浏览器
  • 重要的是要屈服FormRequests withdont_filter=True因为我们基本上是在做一个POST请求相同的 URL 但使用不同的参数

代码:

import re

from scrapy.http import FormRequest
from scrapy.spider import BaseSpider


HEADERS = {
    'X-MicrosoftAjax': 'Delta=true',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36'
}
URL = 'http://exitrealty.com/agent_list.aspx?firstName=&lastName=&country=USA&state=NY'


class ExitRealtySpider(BaseSpider):
    name = "exit_realty"

    allowed_domains = ["exitrealty.com"]
    start_urls = [URL]

    def parse(self, response):
        # submit a form (first page)
        self.data = {}
        for form_input in response.css('form#aspnetForm input'):
            name = form_input.xpath('@name').extract()[0]
            try:
                value = form_input.xpath('@value').extract()[0]
            except IndexError:
                value = ""
            self.data[name] = value

        self.data['ctl00$MainContent$ScriptManager1'] = 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$agentList'
        self.data['__EVENTTARGET'] = 'ctl00$MainContent$List'
        self.data['__EVENTARGUMENT'] = 'Page$1'

        return FormRequest(url=URL,
                           method='POST',
                           callback=self.parse_page,
                           formdata=self.data,
                           meta={'page': 1},
                           dont_filter=True,
                           headers=HEADERS)

    def parse_page(self, response):
        current_page = response.meta['page'] + 1

        # parse agents (TODO: yield items instead of printing)
        for agent in response.xpath('//a[@class="regtext"]/text()'):
            print agent.extract()
        print "------"

        # request the next page
        data = {
            '__EVENTARGUMENT': 'Page$%d' % current_page,
            '__EVENTVALIDATION': re.search(r"__EVENTVALIDATION\|(.*?)\|", response.body, re.MULTILINE).group(1),
            '__VIEWSTATE': re.search(r"__VIEWSTATE\|(.*?)\|", response.body, re.MULTILINE).group(1),
            '__ASYNCPOST': 'true',
            '__EVENTTARGET': 'ctl00$MainContent$agentList',
            'ctl00$MainContent$ScriptManager1': 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$agentList',
            '': ''
        }

        return FormRequest(url=URL,
                           method='POST',
                           formdata=data,
                           callback=self.parse_page,
                           meta={'page': current_page},
                           dont_filter=True,
                           headers=HEADERS)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用回发数据抓取页面 javascript Python Scrapy 的相关文章

  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

    我的页面上有一个危险的滑动器 它成功地模拟了幻灯片和随附滚动条上的触摸事件 允许单击鼠标并移动以向左或向右滑动幻灯片 这很好 但我现在在滑动器内的幻灯片上调用了可拖动 这意味着我需要停止此触摸模拟 拖动幻灯片并同时移动它们会引起混乱 但仅限
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • 如何在React中动态分配属性?

    这是一个有两个参数的函数 我要创建的标签的名称 具有以下属性的对象 Using React 我创建一个组件并将该元素渲染到 DOM 问题是我想向元素添加属性 但它不允许循环在元素内设置属性 var Element function elem
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • 如何解决“消息端口在收到响应之前已关闭”的问题。在 JavaScript 中的 window.location.reload() 之后

    我遇到了 javascript 问题 从 chrome v73 0 3683 86 开始 每当我在 window location reload 函数之后运行 javascript 代码时 它总是给我错误 Unchecked runtime
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 正则表达式仅允许特定数字

    我正在寻找一个只允许输入特定数字的正则表达式 例如2 4 5 6 10 18 我尝试过类似的东西 2 4 5 6 10 18 我输入的任何内容都无法通过正则表达式 然后计算机用手指着我并大笑 我哪里出错了 单引号是不必要的 您正在寻找的正则
  • 如何让 webpack 和 iis express 协同工作?

    I have Angular 2 和 Webpack 2 入门 https github com qdouble angular webpack2 starter它通过 webpack dev server 在节点上运行 我如何使用 web

随机推荐

  • 使用 colspan 设置 下 的宽度

    我想设置宽度td in tbody在下面thead具有colspan 2 具有硬定义的列宽 以 为单位 浏览器外壳不会动态调整表格宽度 sample width 100 table layout fixed sample td nth ch
  • java: wait()、notify() 和同步块

    我了解到调用对象的wait 方法将释放对象监视器 如果存在 但我有一些关于打电话的问题notify 另一个线程在此对象上 如果另一个 第三个 线程同时拥有对象监视器 何时 等待线程会醒来吗 如果第三个线程调用 等待线程会被唤醒吗wait 在
  • Ant 中出现“无法创建任务或输入 antlib:org.apache.maven.artifact.ant:mvn”错误

    运行 ant 任务时 Ant 构建无法运行build xml 我在控制台中收到以下错误 Buildfile F Eclipse Projects my project build xml typedef Could not load def
  • 在 Angular 中同步调用一个又一个的可观察对象

    我可以拨打以下服务电话 产品服务 GetAllProducts 产品服务 删除产品 产品服务 GetCategories 产品服务 DeleteCategory 在 sudo 代码中 我需要在组件中执行以下操作 使用productServi
  • 设置 UDP 套接字的源 IP

    我有一个绑定到 INADDR ANY 的 UDP 套接字 用于侦听我的服务器拥有的所有 IP 上的数据包 我通过同一个套接字发送回复 现在 当数据包发出时 服务器会自动选择哪个IP用作源IP 但我希望能够自己设置传出源IP 有没有办法做到这
  • Firebase Firestore REST 示例

    您好 我正在编写一个使用 firebase firestore 并将一些 json 写入 firestore 中的特定集合的脚本 我已经使用实时数据库完成了此操作 但 firestore 有点不同 下面是我的实时数据库片段 curl X P
  • 当另一个输入焦点时,contenteditable div 失去选择

    我对 contenteditable div 有疑问 当我想在其上执行一个简单的命令 如粗体或斜体 时 我执行以下操作 记住div 因为点击粗体按钮后它会失去焦点 单击按钮时 我重新聚焦 div 并执行粗体命令 一切正常 现在 当我尝试做更
  • 如何在 Ecto 迁移中运行更新?

    I use Phoenix and Ecto在我的一个项目中 我想向一个表添加一列 并且我希望它是一个NOT NULL柱子 但我已经有一些现有的数据 所以我决定添加列 将所有行更新为某个值并将列修改为NOT NULL 我尝试了这两个代码 s
  • 何时在 Swift 中使用全局变量

    我正在学习 Swift 和 iOS 应用程序开发 我想知道在哪些情况下 如果有的话 我应该在 iOS 应用程序中使用全局变量和常量 全局变量是在任何函数 方法 闭包或类型上下文之外定义的变量 局部变量是在函数 方法或闭包上下文中定义的变量
  • Git 推送到 Windows 共享失败

    我正在尝试从本地存储库推送到位于 Windows 共享中的远程存储库 我将重新创建一个简单的场景 其中 c 是我的本地硬盘 n 是映射的网络驱动器 并向您展示我遇到的错误 创建本地存储库 user PC W7 c More git git
  • 当多个路径匹配时,Express 如何知道使用哪个 Router 路径?

    假设有2个router route 例如 router route app id get funtion req res next console log id route and router route app username get
  • 如果启用全页缓存,企业版控制器事件不会触发

    因此 在我们最近的一次发布中 我们观察了很多事件 例如controller action predispatch 网站上线后 我们开始注意到我们的观察员从未被要求进行这些操作 经过一番调查后 我们的一位开发人员在 Mage Core Mod
  • PHP 中的推送通知

    在尝试执行 php 脚本以向我的 iphone 发送推送通知后 我收到此错误 我已经尝试了一切 但没有任何效果 我相信这意味着我的ck pem是错误的 但我不确定是 key pem 还是 cert pem 错误 请帮忙 Script Thi
  • stl分配器、其他类型的复制构造函数、重新绑定

    STL 分配器需要以下构造函数形式 20 1 5 X a b 的要求是Y a b 在标准实现中 这意味着并且实现为 template
  • 遮蔽 Maven 中的依赖关系

    我有两个通过 Maven 导入的依赖项 它们都导入一个公共库 但版本不同 但版本彼此不兼容 本质上是描述的问题在这篇文章中 但不幸的是 对我来说 解决方案并不像博客文章描述的那么简单 因为没有通用版本的包Z这适用于两个依赖项 跳过导致这一点
  • Android 中如何统计通知数量并显示单个图标?

    我有多个 Android 通知 但是当我从网络服务器发送消息时 Android 设备会在状态栏上创建一个新的通知图标 我想统计未读通知的数量 显示在statusbar具有单个图标 并且当阅读通知时 该通知必须更改未读通知计数的数量 我该怎么
  • 信号量和并发编程

    对于家庭作业 我需要编写以下场景 这将通过使用 BACI 的信号量来完成 即 C 有 2 个男女通用卫生间 每个可容纳 4 人 由于它是男女皆宜的 所以只有同性别的人可以同时进入卫生间 先进先出并不重要 我脑子里有一个基本的 算法 可以处理
  • 数据库的 ID 最佳实践 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想知道构建和存储 ID 的最佳实践是什么 几年前 一位教授以社会安全号码为例 向我讲述了构造不良的身份识别系统的危险 特别是 由于 SSN 没有任何错误检测功能 无法区分 9 位数字符串
  • 如何使用 xcode5 在 mac 应用程序中对捆绑的可执行文件进行代码签名

    我有一个在 xCode 5 中创建的应用程序 其中包含捆绑的可执行文件 我正在尝试将应用程序提交到 Mac 应用程序商店 但是当我提交它时 它失败并显示以下消息 未启用应用程序沙箱 以下可执行文件必须包含 com apple securit
  • 使用回发数据抓取页面 javascript Python Scrapy

    我正在通过 Scrapy 使用 ASP NET 编程爬行一些目录 要爬行的页面编码如下 javascript doPostBack ctl00 MainContent List Page X 其中 X 是 1 到 180 之间的整数 Mai