用请求而不是硒来抓取

时间:2017-05-31 09:36:22

标签: python-3.x selenium-webdriver web-scraping beautifulsoup python-requests

我已经设法用Selenium抓取documentation但是由于速度慢,我想用POST请求提取数据,但我甚至不确定是否可能。

我正在尝试使用默认搜索参数并命名为'Amit Kumar'。我以为我用以下代码实现了这个目标:

start_url = "http://bombayhighcourt.nic.in/party_query.php"
raw_data = "m_hc=01&m_side=C&pageno=1&m_party=Amit+Kumar&petres=P&myr=2017&submit1=Submit"
json={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}

requests.post(start_url, json=json, data=raw_data).text

然而,我得到的只是一个没有数据的空模板。我也尝试将原始数据作为字典传递,但还没有任何成功。对于那种类型的项目,我真的需要硒吗?

1 个答案:

答案 0 :(得分:2)

您需要将标题(如User-Agent)设置为headers参数,如果您要发布手工制作的查询,则应将其附加到您的网址,以便:

start_url = "http://bombayhighcourt.nic.in/party_query.php"
raw_data = "m_hc=01&m_side=C&pageno=1&m_party=Amit+Kumar&petres=P&myr=2017&submit1=Submit"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}

res = requests.get("{}?{}".format(start_url, raw_data), headers=headers)
print(res.text)  # or do whatever you want with the response

如果您愿意,requests可以为您构建查询字符串:

start_url = "http://bombayhighcourt.nic.in/party_query.php"
raw_data = {"m_hc": "01",
            "m_side": "C",
            "pageno": 1,
            "m_party": "Amit+Kumar",
            "petres": "P",
            "myr": 2017,
            "submit1": "Submit"}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}

res = requests.get(start_url, params=raw_data, headers=headers)
print(res.text)  # or do whatever you want with the response

更新 - 我检查了您网页的来源,并且您提交的网址错误 - 如果您打开它,则会向您提供指向{{1}的表单相反,你应该发布与所述表格的字段匹配的数据。因此,为了得到您想要的答案,您可以使用:

http://bombayhighcourt.nic.in/partyquery_action.php