使用带有输入参数的 httparty 的简单 ruby 请求

问题描述 投票:0回答:1

我正在学习 ruby 并尝试在命令行上执行简单的 ruby 请求来抓取网站。有 2 个输入元素,其 ids =“tb_radius_miles”和“locationSearchTextBox”

我正在尝试使用填充的这些值发出请求,然后读取显示在文本区域中的 id="tb_output" 的结果

我所有的努力导致所有这些标签在我读出时都具有空值。

这是我的红宝石脚本:

require "httparty" 
require "nokogiri"
require 'json'


response = HTTParty.post("https://www.freemaptools.com/find-zip-codes-inside-radius.htm",
  { 
    :body => [ { "tb_radius_miles" => "10", "locationSearchTextBox" => "10118" } ].to_json,
    :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
  })


# parse html of web page
document = Nokogiri::HTML(response.body)
puts document.at_css("textarea#tb_output")
puts document.at_css("input#tb_radius_miles")
puts document.at_css("input#locationSearchTextBox")

这是我的输出,这些元素中包含空值

<textarea cols="50" rows="4" id="tb_output" name="tb_output" readonly></textarea>

<input type="text" id="tb_radius_miles" value size="4" maxlength="4" onchange="tb_radius_miles_changed(this.value);">

<input type="text" id="locationSearchTextBox" style="width:300px;" placeholder="Example:10118">

我只是期望 3 个打印输出显示我发送的值以及当我在浏览器中手动运行它时应填充到 tb_output 元素中的结果。

我尝试了不同的语法来形成 httparty 请求,例如使用查询而不是正文,删除 : 以及尝试不使用 json 格式的请求。

感谢您的任何提示,我花了令人尴尬的时间阅读、谷歌搜索并试图让这个最基本的脚本发挥作用。

除了 vscode 和安装的 ruby 3.2.3 之外,我没有使用任何工具 有关其他工具使用的提示也将不胜感激。

编辑**** 检查页面的网络选项卡显示一个 php 请求 单击搜索按钮时的参数。是否合适 不过要发送这个网址吗?似乎不是正确的方法 去解决它。 screenshot headers payload

html ruby post screen-scraping httparty
1个回答
0
投票

使用 HTTParty 进行网页抓取时,请确保网站不需要执行 javascript 来显示内容。如果站点依赖 JS 来填充数据,您当前的方法可能不起作用。如果可用,请考虑使用 API,而不是直接抓取输出。检查网站的 robots.txt 是否合法。另外,仔细检查表单提交是否正确发送 JSON 数据;您可能需要模仿表单编码。如果需要 javascript 渲染,切换到像 Selenium 这样的工具可能会更有效地完成您的任务。

© www.soinside.com 2019 - 2024. All rights reserved.