使用需要单击“我同意cookies”按钮的Python(美丽的汤)抓取网页?

Posted

技术标签:

【中文标题】使用需要单击“我同意cookies”按钮的Python(美丽的汤)抓取网页?【英文标题】:Scraping a webpage using Python (beautiful soup) that requires "I agree to cookies" button being clicked? 【发布时间】:2019-12-01 22:11:48 【问题描述】:

我正在尝试为当天的所有足球(足球)比赛抓取以下 URL:https://www.soccerstats.com/matches.asp?matchday=2&daym=tomorrow

我的代码过去可以工作,但网站已更改,您现在需要在网站加载页面之前单击“我同意 cookie”按钮。这现在导致我的代码出现问题。有什么解决办法吗?

非常感谢任何帮助。

我已经尝试查看 bs4 的文本输出,并且很明显网站没有加载,而是在输出中可以看到“我同意 cookie”文本,这意味着它没有通过这个阶段。

from bs4 import BeautifulSoup
import requests

url = "https://www.soccerstats.com/matches.asp?matchday=2"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, 'html.parser')
all_matches = []

all_matches = re.findall(r"""<a class='button' style='background-color:#AAAAAA;font-color=white;' href='(.*?)'>""", data)

输出应列出单个匹配 url。

【问题讨论】:

检查点击“我同意”时浏览器添加了哪些 cookie,然后将 cookie 添加到您的requests.get() 通话中。 非常感谢!完美运行! 没问题,抱歉没有给出完整的答案,我现在添加一个以供后人使用。随意接受它或添加您自己的详细信息。 【参考方案1】:

当您点击“我同意 cookie”时,网站会向您的浏览器发送一个 cookie,基本上告诉网站“此用户已同意 cookie”。您可以通过打开应用程序选项卡并单击左侧的“Cookies”并导航到您所在的网站,在 Chrome 的 DevTools 等工具中捕获此 cookie。

完成此操作后,单击“我同意 cookie”并查看已将哪些 cookie 添加到您的浏览器中。在我正在查看的网站上,添加的 cookie 之一称为 __hs_opt_out,其值为 no。然后,您可以简单地add that cookie to your request:

r = requests.get(url, cookies='__hs_opt_out': 'no')

或者,甚至更好:

s = requests.Session()
s.cookies.update('__hs_opt_out': 'no')
s.get(url)  # Automatically uses the session cookies

# Some more code...

s.get(other_url)  # Remembers the cookie from before

【讨论】:

以上是关于使用需要单击“我同意cookies”按钮的Python(美丽的汤)抓取网页?的主要内容,如果未能解决你的问题,请参考以下文章

几小时/分钟后单击按钮时的提醒通知

使用按钮单击显示 UIMenuController

为啥我需要在提交按钮上单击两次才能提交我的表单?

在 jquery 验证后提交表单 - 需要通过单击按钮来发布数据

使用完成按钮单击关闭 android 活动(完全,甚至不在后台)

使用 Jquery 在第一次单击时禁用提交按钮