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+足以阻止同意窗口显示。
在您的代码中,您尝试通过参数传递 cookie headers。我建议使用该cookies参数。
以此调整您的代码(并从标头中删除 cookie):
\nrequest_result = requests.get( url, headers = headers, cookies = {'CONSENT' : 'YES+'} )\nRun Code Online (Sandbox Code Playgroud)\n使用我的解决方案运行代码后的输出:
\nGeeksforGeeks\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------\nRun Code Online (Sandbox Code Playgroud)\n