You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

requests_html爬取网页遇空白CSV问题,因目标站HTML结构差异求助

问题解决与代码修正

核心问题分析

  1. 会话未初始化:代码中使用r = s.get(url)但未创建HTMLSession实例,会直接抛出NameError。
  2. 数据列表未定义:data.append(entry_dict)中的data没有提前声明为空列表,运行会报错。
  3. 选择器不匹配目标网站结构:当前使用的div.bw-news-list li选择器无法定位到实际的新闻条目,导致没有数据被抓取。
  4. 未实现前3条结果限制:代码会遍历所有条目,没有做数量限制。
  5. CSV写入逻辑未处理追加需求:当前代码会直接覆盖文件,而非追加。

修正后的代码

from requests_html import HTMLSession
import pandas as pd

# 初始化会话和数据列表
s = HTMLSession()
data = []
urls = [
    'https://www.businesswire.com/portal/site/home/search/?searchType=all&searchTerm=delix&searchPage=1',
]

for url in urls:
    r = s.get(url)
    # 修正选择器:定位实际的新闻条目容器(适配当前BusinessWire结构)
    content = r.html.find('div.search-results-list div.search-result-item')
    
    # 只取前3条结果
    for item in content[:3]:
        try:
            title = item.find('h3.search-result-title a', first=True).text
        except Exception as e:
            print(f"获取标题出错: {e}")
            title = ''

        try:
            date = item.find('div.search-result-meta span.search-result-date', first=True).text
        except Exception as e:
            print(f"获取日期出错: {e}")
            date = ''

        try:
            summary = item.find('div.search-result-summary', first=True).text
        except Exception as e:
            print(f"获取摘要出错: {e}")
            summary = ''

        try:
            news_url = item.find('h3.search-result-title a', first=True).absolute_links.pop()
        except Exception as e:
            print(f"获取链接出错: {e}")
            news_url = ''

        entry_dict = {
            'Title': title,
            'Date': date,
            'Summary': summary,
            'URL': news_url
        }

        data.append(entry_dict)

# 处理CSV追加:检查文件是否存在,不存在则写表头,存在则跳过表头
try:
    # 尝试读取现有文件,判断是否需要追加表头
    pd.read_csv('BusinessWire_Information.csv')
    df = pd.DataFrame(data)
    df.to_csv('BusinessWire_Information.csv', mode='a', index=False, header=False)
except FileNotFoundError:
    # 文件不存在时写入表头和数据
    df = pd.DataFrame(data)
    df.to_csv('BusinessWire_Information.csv', index=False)

print('完成')

关键修正说明

  • 选择器适配:根据当前BusinessWire搜索结果的HTML结构,将选择器更新为div.search-results-list div.search-result-item,并对应调整子元素的选择器(标题、日期、摘要等)。
  • 会话与数据初始化:添加s = HTMLSession()和data = []解决未定义问题。
  • 前3条限制:通过content[:3]只遍历前3个条目。
  • CSV追加逻辑:通过try-except判断文件是否存在,实现首次写入表头、后续追加数据不重复写表头的需求。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:07:41