使用Python和BeautifulSoup从Bing提取链接时遇空值问题
用Python+BeautifulSoup提取Bing搜索URL的问题解决办法
我来帮你排查下问题哈,你的代码里有两个关键问题导致urls变量为空,咱们一步步来修正:
1. 请求参数传递错误
你调用requests.get的时候,把查询参数payload直接放在了第二个参数位置,但requests.get的第二个参数是params(专门用来传递GET请求的查询参数),你之前的写法会把payload当成data参数(这是POST请求用的),导致请求的URL不对,返回的页面可能不是你要的搜索结果页,自然找不到目标标签。
正确的请求写法应该是:
req = requests.get('https://www.bing.com/search', params=payload, headers=headers)
2. Bing页面结构已更新
你要找的<div class="b_title">这个类名现在已经不是Bing搜索结果标题的容器了,现在Bing的搜索结果标题一般放在<h2>标签里,标题的链接直接在<h2>下的<a>标签中。
修正后的完整代码
import requests from bs4 import BeautifulSoup # 设置查询参数和请求头 payload = {'q': 'sport', 'first': '11'} # 用更真实的浏览器User-Agent,避免被Bing拦截 headers = {'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'} # 发送正确的GET请求 req = requests.get('https://www.bing.com/search', params=payload, headers=headers) req.encoding = 'utf-8' # 确保页面编码正确,避免乱码 # 解析页面 soup = BeautifulSoup(req.text, 'html.parser') # 提取搜索结果URL urls = [] # 遍历所有搜索结果的标题标签 for result_title in soup.find_all('h2'): link_tag = result_title.find('a') if link_tag and 'href' in link_tag.attrs: raw_url = link_tag['href'] # 处理相对链接,拼接成完整URL if raw_url.startswith('/'): raw_url = 'https://www.bing.com' + raw_url urls.append(raw_url) # 输出提取到的URL print(urls)
补充说明
- 建议使用更贴近真实浏览器的
User-Agent,不然Bing可能会返回反爬页面,导致无法提取内容。 - 如果之后Bing的页面结构再变化,你可以用浏览器的开发者工具(F12)查看当前搜索结果的HTML结构,调整BeautifulSoup的选择器即可。
内容的提问来源于stack exchange,提问作者user7665219
相关产品推荐
相关产品推荐

