Python爬取BIS多链接页面演讲标题作者时select返回空列表求助
问题根因
你的选择器返回空列表,核心是两个问题:
- 发起请求时没有携带合法的
User-Agent请求头:requests默认的UA标识为python-requests/xxx,目标网站的反爬规则会直接拦截这类爬虫请求,返回的响应内容和浏览器正常访问得到的页面结构完全不一致,根本不存在你要匹配的元素。 - 你通过SelectorGadget获取的选择器是JS渲染后的页面对应的,虽然该站点的演讲列表本身是静态嵌入HTML返回的,但
#cbspeeches_list a选择范围过宽,在没拿到正确页面源码的情况下必然匹配不到结果。
修正代码
首先给请求加上浏览器UA模拟正常访问,再精准定位每一行演讲条目提取信息即可,无需引入动态渲染工具,可直接运行:
from bs4 import BeautifulSoup import requests url = 'https://www.bis.org/cbspeeches/index.htm?m=1123' # 配置请求头模拟Chrome浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } resp = requests.get(url, headers=headers) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "lxml") speech_list = [] # 遍历列表每一行 for row in soup.select("#cbspeeches_list tbody tr"): title_ele = row.select_one("td.title a") author_ele = row.select_one("td.author") speech_list.append({ "title": title_ele.get_text(strip=True), "author": author_ele.get_text(strip=True) }) # 打印输出结果 for item in speech_list: print(f"标题:{item['title']},作者:{item['author']}")
提示:你原代码中导入的
numpy没有任何实际用途,可以删除,避免冗余依赖。
运行上述代码即可正常获取第一页全部10条演讲的标题、作者信息。
内容的提问来源于stack exchange,提问作者Rollo99
相关产品推荐
相关产品推荐

