使用需要单击“我同意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(美丽的汤)抓取网页?的主要内容,如果未能解决你的问题,请参考以下文章
在 jquery 验证后提交表单 - 需要通过单击按钮来发布数据