使用表单抓取网站

时间:2018-04-23 13:10:48

标签: python python-requests

我正在尝试从此网站获取数据: https://action.labour.org.uk/page/content/council-cuts-calculator

我打算遍历一个邮政编码列表并收集每个邮政编码的信息。

我尝试过像这样使用请求模块:

import requests
url = 'https://action.labour.org.uk/page/content/council-cuts-calculator'
payload =   {'firstname': 'james',
            'email': 'myemailaddress',
            'zip': 'WS13 6QG',
            'custom_15452': 'no'}
response = requests.post(url, data=payload)
results_text = response.text
soup = BeautifulSoup(results_text, 'html.parser')
print(soup.get_text())

代码运行时没有错误,但似乎没有将信息传递给表单,或者至少打印的部分不包含与手动输入相同信息相同的信息。我怀疑这可能是因为它使用的是javascript而不是请求,但不知道该怎么说。

任何人都可以让我知道用什么方法来获取我想要的信息,下面是一个示例结果。另外,更一般地说,如何判断网站表单是否需要requests.get requests.post或其他方法?

  

在利希菲尔德,到2020年,你的议会将比你的家庭花费少68英镑。

     

在托利党统治下,该国一些最贫困的地区遭受的打击最为严重,而保守党议会则获得了更好的协议。平均而言,保守党理事会将减少每个家庭花费128英镑,而劳工委员会则遭受四倍的打击 - 损失524英镑。

1 个答案:

答案 0 :(得分:0)

看起来当您第一次发出POST请求时,还会向https://stats-microapi-production.herokuapp.com发出另一个即时GET请求,以获取您要查找的数据。

原来你可以发出GET请求 https://stats-microapi-production.herokuapp.com/index.php?campaign=1&pc=WS136QG具有适当的密码,无需先发出POST请求。

仅供将来参考,使用mitmproxy或其他替代方法分析浏览器处理的网络数据包会很有帮助。