使用请求进行身份验证后抓取网页

时间:2021-01-11 11:09:50

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

我在 Python 3.9 中做了一个网页抓取脚本。

我想从这个网站收集一些信息:https://www.matchendirect.fr/。 这个网站是法语的,但我不认为尝试帮助我是一个真正的问题。

我需要的信息是鼠标悬停在“Pronostics des internautes”部分中显示的数组。 HTML 代码以:<table class="table table-bordered MEDtpro">

开头

我在浏览器上重新创建了 cookie 来模拟我在这篇文章 How to send cookies with urllib 上的回答后的连接,但它没有用。

这是我的代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests

cookies = {
    'PHPSESSID': 'a2q4evve875s1ibamiqmc93ru6',
    'c_compte_cle': '76598fbd4fe763e768dc79275c02e11f',
    'c_compte_id':'311084',
    'c_compte_pseudo':'foobar',
    'c_compte_url_image':'%2Fimage%2Fcommun%2Fmembre-med-t16.png',
    'c_coucours_promo':'3'
    }
headers = {'User-Agent': 'Mozilla/5.0'}


link = "https://www.matchendirect.fr/live-score/caen-toulouse.html"

response = requests.get(link, cookies=cookies, headers=headers)
webpage = response.text

print("Success!") if webpage.find('<table class="table table-bordered MEDtpro">')>-1 else print("Failed!")

有人可以帮我解决这个问题吗?

这个帐户是一个垃圾帐户,供想要测试的人使用。

1 个答案:

答案 0 :(得分:1)

您正在查找的内容由 AJAX 请求更新。您可以通过向 AJAX 网址发送请求来查找数据。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup


link = "https://www.matchendirect.fr/live-score/caen-toulouse.html"

response = requests.get(link)
soup = BeautifulSoup(response.content, "html.parser")
f_id_match = soup.find("input", {"name": "f_pronostic_id_match"})["value"]


data_response = requests.get("https://www.matchendirect.fr/cgi/ajax/liste_pronostic.php?f_id_match={}&f_id_grille=".format(f_id_match))
webpage = data_response.text


print("Success!") if webpage.find('<table class="table table-bordered MEDtpro">')>-1 else print("Failed!")

您需要从页面中找到 f_id_match,然后向该 AJAX 网址发送新请求以查找您要查找的内容。

<块引用>

不要设置 cookie 来模拟浏览器,使用 requests.Session() 创建一个类似浏览器的会话,然后尝试浏览 URL