Python使用BeautifulSoup爬取多URL仅返回最后结果的问题求助
解决多URL爬取仅返回最后一个结果的问题
常见原因及修复方案
1. 数据存储未做追加操作
如果循环中直接用赋值语句覆盖存储容器(比如列表),之前爬取的内容会被清空,只保留最后一次的结果。
错误示例:
all_titles = [] for url in url_list: current_titles = crawl_titles(url) all_titles = current_titles # 直接赋值,覆盖原有内容
修复后:
all_titles = [] for url in url_list: current_titles = crawl_titles(url) all_titles.extend(current_titles) # 用extend追加列表元素,单个元素用append
2. 爬虫对象状态未重置
如果使用Selenium这类需要浏览器实例的工具,循环中复用同一个driver可能导致页面内容未刷新,最终只抓取到最后一次加载的页面数据。
修复方案:
- 每次循环结束后调用
driver.refresh()刷新页面; - 或者在每个URL请求前新建driver实例(注意循环结束后调用
driver.quit()释放资源); - 确保等待页面完全加载后再执行元素抓取(比如用
WebDriverWait等待目标元素出现)。
3. 选择器适配性差
不同航空公司的页面结构可能存在差异,若选择器只适配最后一个URL的页面,前面的URL可能抓取不到内容,看起来像是只返回最后一个结果。
修复方案:
- 逐个检查每个URL对应的页面DOM结构,调整选择器为通用规则;
- 循环内打印当前URL的抓取结果数量,确认是未抓取到还是被覆盖。
4. 循环逻辑疏漏
比如URL列表未正确包含5个地址,或者循环变量未遍历整个列表。
修复方案:
- 先打印
url_list确认所有URL都在列表内; - 循环内添加打印当前处理URL的语句,确保每个地址都被遍历到。
示例完整代码(Python + requests + BeautifulSoup)
import requests from bs4 import BeautifulSoup # 替换为实际的5家航空公司评论页URL url_list = [ "https://airline-review-site.com/airline1", "https://airline-review-site.com/airline2", "https://airline-review-site.com/airline3", "https://airline-review-site.com/airline4", "https://airline-review-site.com/alaska-air" ] all_titles = [] # 添加请求头避免被反爬 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } for url in url_list: print(f"正在处理: {url}") response = requests.get(url, headers=headers) # 检查请求是否成功 if response.status_code != 200: print(f"请求失败: {url},状态码{response.status_code}") continue soup = BeautifulSoup(response.text, "html.parser") # 替换为实际页面中评论标题的选择器 current_titles = [title.text.strip() for title in soup.select(".review-title-class")] print(f"抓取到{len(current_titles)}条标题") all_titles.extend(current_titles) # 输出所有结果 print("\n所有评论标题汇总:") for idx, title in enumerate(all_titles, 1): print(f"{idx}. {title}")
额外注意事项
- 若页面是动态加载(比如滚动加载更多评论),需要改用Selenium或Playwright处理;
- 频繁请求可能触发反爬,可添加随机延迟(
time.sleep(random.uniform(1,3))); - 部分网站需要处理Cookie或登录状态,需在请求中携带对应参数。
内容的提问来源于stack exchange,提问作者Tia
相关产品推荐
相关产品推荐

