python - Scrapy:网页下一个按钮使用 WebForm_DoPostBackWithOptions()
问题描述
我是 scrapy 的新手并试图抓取https://www.sakan.co/result?srv=1&prov=&cty=&maintyp=1&typ=5&minpr=&maxpr=&bdrm=&blk=
该网页使用的href
是以下内容:
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$Content$rptPaging$ctl02$lbPaging", "", true, "", "", false, true))"
数据正在动态加载。我正在尝试查找正在加载但找不到任何数据的源(如果有的话,API 调用)。如何导航到下一页并使用 Scrapy 抓取数据。
解决方案
这个 js 有效地做的是触发一个 POST 请求,你可以在浏览器开发者工具,网络选项卡中查看请求的详细信息。(Firefox 中的 F12 - 打开选项卡并单击链接)
您的 Scrapy 需要重现相同的 POST 请求。正文中的所有信息都在页面中可用,请记住那些以 开头的字段__
,例如__VIEWSTATE
,是依赖于实例的,因此您需要从 Scrapy 加载的页面中检索它们的值,复制和粘贴通常会失败。
更简单的方法是使用FormRequest.from_response()
方法。但是,检查该方法是否生成与您的浏览器相同的请求正文很重要,该方法通常会跳过必填字段或添加额外的字段。(它依赖于页面的<form>
)
您可以在Scrapy FAQ的此链接中阅读有关抓取此类页面的更多信息。
最后一个提示:如果您的请求正文就像浏览器一样,但请求仍然失败,您可能还需要重现请求标头。
推荐阅读
- linux - 我想使用命令打印上个月的最后一个日期,时间戳为“23:59:59”
- angular - Angular PrimeNg:使用@ViewChild 未检测到 p 表
- jpa - Spring Data JPA 接口和基于类的投影不适用于嵌入式键的 DISTINCT 字段
- html - 电子邮件不会在 iPhone 上显示
- javascript - 在反应js中更改不受控制的输入
- android - 验证 RecyclerView 内容
- php - 在数组中添加所有相同类型的对象
- javascript - 我无法获得正确的工作日期和时间倒计时
- android - flutter_local_notification 分组通知不起作用
- javascript - 打印具有 php 数组值的 json 值