【问题标题】:scraping with requests instead of selenium用请求而不是硒来抓取
【发布时间】:2017-05-31 09:36:21
【问题描述】:

我已经设法用 Selenium 刮取this website 但是,由于速度慢,我想用 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

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

【问题讨论】:

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


    【解决方案1】:

    您需要将标题(如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
    

    更新 - 我检查了您页面的来源,但您提交到了错误的 URL - 如果您打开它,您会看到一个指向 http://bombayhighcourt.nic.in/partyquery_action.php 的表单,并且您应该向其发布与所述表单的字段匹配的数据。因此,要获得您想要的响应,您可以使用:

    start_url = "http://bombayhighcourt.nic.in/partyquery_action.php"
    raw_data = {"m_hc": "01",  # 01: Bombay; 02: Aurangabad; 03: Nagpur
                "m_side": "C",  # C: Civil; CR: Criminal; OS: Original
                "pageno": 1,  # page number
                "m_party": "Amit Kumar",  # search query
                "petres": "P",  # P: Petitioner; R: Respondent
                "myr": 2017}  # valid range 1965-2017
    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.post(start_url, data=raw_data, headers=headers)
    print(res.text)  # or do whatever you want with the response
    

    【讨论】:

    • 谢谢,它确实提取了更多的源代码,但仍然没有得到结构为派对名称/替补/案例编号的表格的结果,其中 Amit Kumar 有 214 个结果(给定默认设置)。尝试手动运行搜索,看看我在追求什么。还是谢谢。
    • @pawelty - 您以错误的格式将数据提交到错误的 URL,请检查更新。
    猜你喜欢
    • 2018-03-22
    • 2021-10-28
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多