使用Python和beautifulsoup4登录网站后,如何抓取搜索结果?

时间:2019-04-06 21:11:14

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

所以我基本上想登录一个网站,在页面上执行搜索,然后抓取所有结果。

我已经设法使用python和请求登录,但是当我在页面上执行get请求时,我想执行搜索,或者每当我在该页面上执行后发请求时,都将所有搜索条件传递给正文,我没有得到任何搜索结果。相反,标题仍然显示“登录页面”,即登录页面的标题,因此,似乎以某种方式我无法在登录后执行任何REST操作。是否有任何特定的方法可以在需要时删除网站一个要登录然后执行搜索?

以下是我的尝试:

import requests
from lxml import html
from bs4 import BeautifulSoup

USERNAME = "abcdefgh"
PASSWORD = "xxxxxxx"

LOGIN_URL = "https://www.assortis.com/en/login.asp"
URL = "https://www.assortis.com/en/members/bsc_search.asp?act=sc"
SEARCH_URL = "https://www.assortis.com/en/members/bsc_results.asp"


def scrapeIt():
    session_requests = requests.session()

    #login
    result = session_requests.get(LOGIN_URL)
    tree = html.fromstring(result.text)
    # print(tree)

    # Create payload
    payload = {
        "login_name": USERNAME,
        "login_pwd": PASSWORD,
        "login_btn": "Login"
    }

    search_payload = {
        'mmb_cou_hid': '0,0',
        'mmb_don_hid': '0,0',
        'mmb_sct_hid': '0,0',
        'act': 'contract',
        'srch_sdate': '2016-01-01',
        'srch_edate': '2018-12-31',
        'procurement_type': 'Services',
        'srch_budgettype': 'any',
        'srch_budget': '',
        'srch_query': '',
        'srch_querytype': 'all of the words from'
    }
    # Perform login
    result = session_requests.post(LOGIN_URL, data=payload, headers=dict(referer=LOGIN_URL))

    # Scrape url
    result = session_requests.get(URL, headers=dict(referer=URL))
    result = session_requests.post(SEARCH_URL, data=search_payload, headers=dict(referer=SEARCH_URL))
    content = result.content
    # print(content)
    data = result.text
    soup = BeautifulSoup(data, 'html.parser')

    print(soup)


scrapeIt()

任何帮助将不胜感激。谢谢。

编辑:该网页可能使用JavaScript

1 个答案:

答案 0 :(得分:0)

登录后将您的response.text保存到本地文件,以查看是否实际登录,请检查文件 否则,请尝试硒chromedriver,而不是对http请求进行反向工程

使用硒时,日志记录部分更容易一些,但在页面上查找东西却不是,请使用动态加载等待异常,使用driver.page_source查看html,有时浏览器会编写不同的html,例如:<tbody>标签