如何使用Python 3中的请求从下拉菜单中选择值?

时间:2019-06-11 17:21:49

标签: python web-scraping beautifulsoup request python-requests

我想从网站https://xlnindia.gov.in/frm_G_Cold_S_Query.aspx抓取数据。我必须将选择为德里,将地区选择为 Adarsh Nagar(4),然后单击搜索按钮,然后抓取所有信息。

到目前为止,我尝试使用下面给出的代码作为

<div id="rating-bar"></div>

错误信息为“ HTTPS 443 SSL ”,我使用“ verify = False

解决了该错误
import requests
from bs4 import BeautifulSoup
  

错误:响应[500]

soup2

  

错误:                   无效的回发或回调   论点。使用在配置中或<%@页面   页面中的EnableEventValidation =“ true”%>。为了安全起见,   此功能验证回传或回调事件的参数   源于最初呈现它们的服务器控件。如果   数据有效且符合预期,请使用   ClientScriptManager.RegisterForEventValidation方法以   注册回发或回调数据以进行验证。

有人可以帮我刮擦它或完成它吗。

我只能使用 REQUEST BEAUTIFULSOUP 库,没有SELENIUM,MECHANIZE等库。

1 个答案:

答案 0 :(得分:1)

请尝试使用以下脚本来获取要填充的表格结果,方法是从该网页中选择两个下拉菜单项。事实证明,您必须随后发出两个发布请求才能填充结果。

import requests
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url = 'https://xlnindia.gov.in/frm_G_Cold_S_Query.aspx'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0'
    resp = s.get(url,verify=False)
    soup = BeautifulSoup(resp.text,"lxml")

    dictinfo = {i['name']:i.get('value','') for i in soup.select('input[name]')}
    dictinfo['ddlState'] = 'DL'

    res = s.post(url,data=dictinfo)
    soup_obj = BeautifulSoup(res.text,"lxml")

    payload = {i['name']:i.get('value','') for i in soup_obj.select('input[name]')}
    payload['ddldistrict'] = 'ADN'

    r = s.post(url,data=payload)
    sauce = BeautifulSoup(r.text,"lxml")
    for items in sauce.select("#dgDisplay tr"):
        data = [item.get_text(strip=True) for item in items.select("td")]
        print(data)

您可能会在控制台中看到的输出如下:

['Firm Name', 'City', 'Licences', 'Reg. Pharmacists / Comp. Person']
['A ONE MEDICOS', 'DELHI-251/1, GALI NO.1, KH, NO, 739/251/1, NEAR HIMACHAL BHAWAN,SARAI PIPAL THALA, VILLAGE AZAD PUR,', 'R - 2', 'virender kumar, DPH, [22295-17/10/2013]']
['AAROGYAM', 'DELHI-PVT. SHOP NO. 1, GF, 121,VILLAGE BHAROLA', 'R - 2', 'avinesh bhadoriya, DPH, [27033-]']
['ABCO INDIA', 'DELHI-SHOP NO-452/22,BHUSHAN BHAWAN RING ROAD,FLYOVER AZAD PUR', 'W - 2', 'sanjay dubey , SSC, [C-P-03/01/1997]']
['ADARSH MEDICOS', 'DELHI-NORTHERN SIDE B-107, GALI NO. 1,,MAJLIS PARK, VILLAGE BHAROLA,', 'R - 2', 'dilip kumar, BPH, [28036-11/01/2018]']