Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python中的请求向具有多个表单标记的网站发送post请求_Python_Python 3.x_Python Requests - Fatal编程技术网

使用python中的请求向具有多个表单标记的网站发送post请求

使用python中的请求向具有多个表单标记的网站发送post请求,python,python-3.x,python-requests,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'

晚上好,, 我想写一个程序,在一个叫做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_数据”中的数据向该网站提交post请求,以便它搜索我想要的股票/股份,然后给我下一页


提前感谢

这是一个相当普遍的问题,您可以使用google chrome的开发工具来解决。基本上

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

在您的案例中,页面应如下所示:

2-然后在网络选项卡下选择XHR选项卡,该选项卡将过滤掉所有获取和XHR请求。这些请求通常在表单提交之后发送,并且大部分时间返回带有结果数据的JSON

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

4-提交表单,然后你会看到大量的请求被提出。检查他们,希望找到你想要的

在本例中,我找到了这个URL端点,它将结果作为响应给出

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

要检索那些公司ID部门ID值,您可以向包含这些下拉列表的页面发送get请求,并过滤html以在下面的屏幕截图中找到这些值:

您可以查看此文档,以便BS4在HTML源代码中查找标记


实际上,当您从主页提交表单时,它会将您重定向到目标页面,url如下所示,“https://www.hl.co.uk/shares/search-for-investments?stock_search_input=abc&x=56&y=35&category_list=CEHGINOPW“,因此我认为,与其提交主页表单,您应该使用自己的GET参数直接调用目标页面,您应该调用的url如下所示。

希望这对你有所帮助

也许看看硒?您可以使用
标题
参数,就像您在什么地方尝试过的那样?请求中的第三行示例代码显示了如何使用数据发布帖子,您尝试过了吗?这对你不起作用吗?谢谢大家的建议,我会仔细研究一下的@我不会说谎,我真的没有尝试任何东西,我只是有一个巨大的大脑放屁,甚至没有开始的地方。我以前写过代码来提交表单数据,但从来没有在包含多个表单的页面上提交表单感谢您提供非常详细的答案这在很多方面都很有帮助。然而,这似乎是一个愚蠢的问题,但您提到的companyid和sectorid都是与我假设的公司相关的数字。如何找到相关ID?啊,我认为找到ID的方法可以通过检索标签的html来完成,如果你进入表单页面,右键单击dropwon,然后单击Inspect,你可以看到下面的每个值都有公司名称和ID作为“value”属性。您可以像在您的示例中一样使用BeautifulSoup保存或打印这些值。这是一个好主意,这将使其更加简单。我来试一试,让你知道