【发布时间】:2019-06-11 17:21:49
【问题描述】:
我想从网站https://xlnindia.gov.in/frm_G_Cold_S_Query.aspx 抓取数据。我必须选择 State 作为 Delhi,District 作为 Adarsh Nagar (4) 并点击 搜索按钮,并抓取所有信息。
到目前为止,我尝试使用下面给出的代码
import requests
from bs4 import BeautifulSoup
错误是“HTTPS 443 SSL”,我使用“verify = False
解决了这个问题resp = requests.get('https://xlnindia.gov.in/frm_G_Cold_S_Query.aspx',verify=False)
soup = BeautifulSoup(resp.text,"lxml")
dictinfo = {i['name']:i.get('value','') for i in soup.select('input[name]')}
dictinfo['ddlState']='Delhi'
dictinfo['ddldistrict']='Adarsh Nagar (4)'
dictinfo['__EVENTTARGET']='btnSearch'
dictinfo = {k:(None,str(v)) for k,v in dictinfo.items()}
r=requests.post('https://xlnindia.gov.in/frm_G_Cold_S_Query.aspx',verify=False,files=dictinfo)
r
错误:响应 [500]
汤2
错误: 无效的回发或回调 争论。使用
在配置或 在页面中。出于安全目的, 此功能验证回发或回调事件的参数 源自最初呈现它们的服务器控件。如果 数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法,以便 注册回发或回调数据以进行验证。
谁能帮我把它刮掉或完成它。
(我只能使用 REQUEST 和 BEAUTIFULSOUP 库,没有 SELENIUM、MECHANIZE 等库。)
【问题讨论】:
-
你为什么要将字典作为文件发送?
-
你可能还需要一些标题
-
另外
ddlState对应'DL'在使用浏览器时,再次检查您的输入 -
@SuperStew - 嗨 Stew,实际上我是 Requests 库的新手,在这种情况下我通常更喜欢 Selenium。我从链接how to pass parameter 中找到的。我尝试使用它,但它似乎不起作用。我在选择状态时看到了 javascript post 方法并发现使用了“ddlState”变量,所以我将该变量用作 dict 参数来发布请求库的方法。
-
检查您不需要执行至少两个单独的 POST 请求,因为我在选择德里后立即看到初始 POST 请求。如果是这样,请使用 Session 从第一个 POST 中传递 cookie。
标签: python web-scraping beautifulsoup request python-requests