繁体   English   中英

使用 python 中的请求将发布请求发送到具有多个表单标签的网站

[英]send a post request to a website with multiple form tags using requests in python

晚上好,我正在尝试编写一个程序,在名为 hl.co.uk 的网站上提取某些股票和股票的卖出价。您可以想象,您必须搜索要查看其售价的股票。 到目前为止,我的代码如下:

import requests
from bs4 import BeautifulSoup as soup

url = "https://www.hl.co.uk/shares"

page = requests.get(url)
parsed_html = soup(page.content, 'html.parser')
form = parsed_html.find('form', id="stock_search")
input_tag = form.find('input').get('name')
submit = form.find('input', id="stock_search_submit").get('alt')

post_data = {input_tag: "fgt", "alt": submit}

我已经能够提取正确的表单标签和我需要的输入名称。 但该网站在此页面上有多种表格。

我如何使用“post_data”中的数据向该网站提交发布请求到该特定表单,以便它搜索我想要的股票/共享,然后给我下一页?

提前致谢

这是一个非常普遍的问题,您可以使用 google chrome 的 devtools 来解决。 基本上,

1- 导航到您有表单和一堆字段的页面。

在您的案例页面应如下所示: 在此处输入图片说明

2- 然后在Network选项卡下选择XHR选项卡,这将过滤掉所有 Fetch 和 XHR 请求。 这些请求通常在表单提交后发送,大多数情况下它们返回带有结果数据的 JSON。

3- 确保启用左上角的复选框保留日志,以便在提交表单时列表不会刷新。

4- 提交表单,然后您会看到正在提出一堆请求。 检查它们,希望能找到你要找的东西。

在这种情况下,我找到了这个 URL 端点,它给出了结果作为响应。

https://www.hl.co.uk/ajax/funds/fund-search/search?investment=&companyid=1324&sectorid=132&wealth=&unitTypePref=&tracker=&payment_frequency=&payment_type=&yield=&standard_ocf=&perf12m=&perf36m=&perf &num_holdings=&start=0&rpp=20&lo=0&sort=fd.full_description&sort_dir=asc&

您可以在此处看到所有查询参数,如companyid、sectorid ,您需要做的是更改这些参数,然后向 URL 发出请求。 然后你会得到相关信息。

为了获取这些companyid扇区值,您可以发送GET请求的页面https://www.hl.co.uk/shares/search-for-investments?stock_search_input=ftg&x=17&y=23&category_list=CEHGINOPW其中有那些下拉菜单和过滤 html 以在下面的屏幕截图中找到这些值:

您可以查看此 BS4 文档以在 HTML 源代码中查找标签, https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find

在此处输入图片说明

实际上,当您从主页提交表单时,它会将您重定向到目标页面,网址如下所示,“https://www.hl.co.uk/shares/search-for-investments?stock_search_input=abc&x= 56&y=35&category_list=CEHGINOPW”,所以在我看来,与其提交主页表单,不如直接用自己的GET参数调用目标页面,你应该调用的url看起来像这样https://www。 hl.co.uk/shares/search-for-investments?stock_search_input=[your_keywords]
希望这对你有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM