python - 如何使用 bs4 打印第一个 google 搜索结果链接?
问题描述
我是python的初学者,我正在尝试从google获取第一个搜索结果链接,该链接使用beautifulsoup存储在class='yuRUbf'的div中。当我运行脚本输出为“无”时,这里的错误是什么。
import requests
import bs4
url = 'https://www.google.com/search?q=site%3Astackoverflow.com+how+to+use+bs4+in+python&sxsrf=AOaemvKrCLt-Ji_EiPLjcEso3DVfBUmRbg%3A1630215433722&ei=CR0rYby7K7ue4-EP7pqIkAw&oq=site%3Astackoverflow.com+how+to+use+bs4+in+python&gs_lcp=Cgdnd3Mtd2l6EAM6BwgAEEcQsAM6BwgjELACECc6BQgAEM0CSgQIQRgAUMw2WPh_YLiFAWgBcAJ4AIABkAKIAd8lkgEHMC4xMC4xM5gBAKABAcgBCMABAQ&sclient=gws-wiz&ved=0ahUKEwj849XewdXyAhU7zzgGHW4NAsIQ4dUDCA8&uact=5'
request_result=requests.get( url )
soup = bs4.BeautifulSoup(request_result.text,"html.parser")
productDivs = soup.find("div", {"class": "yuRUbf"})
print(productDivs)
解决方案
因为你想首先谷歌搜索你正在寻找的类名可能与名称不同所以首先你可以先手动找到该链接,这样很容易识别
import requests
import bs4
url = 'https://www.google.com/search?q=site%3Astackoverflow.com+how+to+use+bs4+in+python&sxsrf=AOaemvKrCLt-Ji_EiPLjcEso3DVfBUmRbg%3A1630215433722&ei=CR0rYby7K7ue4-EP7pqIkAw&oq=site%3Astackoverflow.com+how+to+use+bs4+in+python&gs_lcp=Cgdnd3Mtd2l6EAM6BwgAEEcQsAM6BwgjELACECc6BQgAEM0CSgQIQRgAUMw2WPh_YLiFAWgBcAJ4AIABkAKIAd8lkgEHMC4xMC4xM5gBAKABAcgBCMABAQ&sclient=gws-wiz&ved=0ahUKEwj849XewdXyAhU7zzgGHW4NAsIQ4dUDCA8&uact=5'
request_result=requests.get( url )
soup = bs4.BeautifulSoup(request_result.text,"html.parser")
使用select
方法:
我使用了 css 选择器方法,它识别所有匹配的 div,并从我从索引位置 1 获取的列表中
而且比我
select_one
用来获取a
标签并href
根据它找到!
main_data=soup.select("div.ZINbbc.xpd.O9g5cc.uUPGi")[1:]
main_data[0].select_one("a")['href'].replace("/url?q=","")
使用find
方法:
main_data=soup.find_all("div",class_="ZINbbc xpd O9g5cc uUPGi")[1:]
main_data[0].find("a")['href'].replace("/url?q=","")
输出[两种情况相同]:
'https://stackoverflow.com/questions/23102833/how-to-scrape-a-website-which-requires-login-using-python-and-beautifulsoup&sa=U&ved=2ahUKEwjGxv2wytXyAhUprZUCHR8mBNsQFnoECAkQAQ&usg=AOvVaw280R9Wlz2mUKHFYQUOFVv8'
推荐阅读
- google-cloud-platform - 如何将环境变量从 Cloudbuild 传递到 Dockerfile
- flutter - Android 模拟器的清晰度和大小不合适
- apache-kafka - Kafka Streams:我可以为我的处理器订阅具有不同分区数的多个主题吗
- flutter - 没有为类型“_GetImpl”定义方法“put”
- javascript - 通过发布请求创建收费 coinbase 商务时出错
- linux - 堆栈上的局部变量在函数调用后丢失其值
- powerbi-desktop - 使用 PowerBI 如果我有一个包含每个等级的下限和上限值的表格,我该如何返回正确的等级
- html - HTML 按钮未链接到 CSS
- siri - watchOS 8:无法通过语音激活 Siri 快捷方式
- arrays - 数组中的 Typescript IndexOf 问题
使用状态