绕过欧盟同意请求

Dun*_*boy 2 python cookies web-scraping python-requests

我一直在尝试从谷歌搜索中提取数据,但我无法绕过“在继续使用谷歌搜索之前”同意书。

我试图找到一种解决方法,并看到其他人建议使用 argumentCONSENT=PENDING+999或类似于CONSENT = YES+HU.hu+V10+B+256get 请求的内容。不幸的是,我无法使前一种工作,在后一种情况下,我不完全确定最后三个元素应该替换为什么。

我在下面附上来自此处的示例代码。

import requests
import bs4

headers = {'User-Agent':'Chrome 83 (Toshiba; Intel(R) Core(TM) i3-2367M CPU @ 1.40 GHz)'\
           'Windows 7 Home Premium',
           'Accept':'text/html,application/xhtml+xml,application/xml;'\
           'q=0.9,image/webp,*/*;q=0.8',
           #'cookie': 'CONSENT = YES+HU.hu+V10+B+256' # what are the last three elements?  
           'cookie':'CONSENT=PENDING+999'
           }

text= "geeksforgeeks"
url = 'https://google.com/search?q=' + text
  
request_result=requests.get( url , headers = headers) # here's where the trouble happens 

soup = bs4.BeautifulSoup(request_result.text, "html.parser")

print(soup) # not what one would expect

heading_object=soup.find_all( 'h3' ) 
  
for info in heading_object:
    print(info.getText())
    print("------")
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

小智 8

是的,谷歌确实使用CONSENTcookie 来确定是否显示同意弹出窗口。我通过调整 cookie 的值来玩弄 cookie,我可以得出结论,在撰写本文时,将CONSENTcookie 值设置为YES+足以阻止同意窗口显示。

\n

在您的代码中,您尝试通过参数传递 cookie headers。我建议使用该cookies参数。

\n

以此调整您的代码(并从标头中删除 cookie):

\n
request_result = requests.get( url, headers = headers, cookies = {'CONSENT' : 'YES+'} )\n
Run Code Online (Sandbox Code Playgroud)\n
\n

使用我的解决方案运行代码后的输出:

\n
GeeksforGeeks\n------\nGeeksforGeeks - YouTube\n------\nGeeksforGeeks | LinkedIn\n------\nGeeksforGeeks (@geeks_for_geeks) \xe2\x80\xa2 Instagram photos and videos\n------\nGeeksforGeeks - Twitter\n------\nGeeksforGeeks - Home | Facebook\n------\nGeeks for Geeks - Crunchbase Company Profile & Funding\n------\n
Run Code Online (Sandbox Code Playgroud)\n

  • 这不再有效,即使使用 cookie,您仍然可以访问consent.google.com 网站 (2认同)