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

时间:2020-10-22 19:32:59

标签: python python-3.x python-requests

晚上好, 我试图编写一个程序来提取一个名为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”中的数据向该网站提交发帖请求,以便它搜索我想要的股票/股份,然后给我下一页?

预先感谢

2 个答案:

答案 0 :(得分:0)

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

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

在您的情况下,页面应如下所示: enter image description here

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=&perf60m=&fund_size=&num_holdings=&start=0&rpp=20&lo=0&sort=fd.full_description&sort_dir=asc&

您可以在此处看到所有查询参数,例如 companyid,sectorid 。只需更改这些参数,然后向URL请求即可。然后,您将获得相关信息。

要检索这些 companyid sectorid 值,您可以向具有这些下拉菜单的页面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

中查找标签。

enter image description here

答案 1 :(得分:0)

实际上,当您从首页提交表单时,它会将您重定向到目标页面,并带有一个如下所示的网址:“ https://www.hl.co.uk/shares/search-for-investments?stock_search_input = abc&x = 56&y = 35&category_list = CEHGINOPW“,因此,我认为,您无需提交首页表单,而应使用自己的GET参数直接调用目标页面,您应该调用的网址应如下所示{{3 }}。
希望这对您有帮助