使用HuggingFace transformers做金融文本摘要无法抓取网页内容求助
问题根源
你遇到的返回异常是雅虎财经的反爬机制拦截了默认的requests请求,直接用requests.get()发起请求时,请求头里没有合法的User-Agent信息,雅虎服务器会直接返回反爬提示页面,而非你要的新闻正文,所以你提取到的<p>标签只有反爬提示内容,没有正文段落。
修复方案
第一步:修改请求逻辑,增加合法请求头
给requests请求添加模拟浏览器的User-Agent,绕过基础反爬校验,示例代码如下:
# 增加请求头配置 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 注意清理原URL里多余的「enter code here」无效字符,否则会指向404页面 url = "https://au.finance.yahoo.com/news/china-restricting-tesla-use-uncovers-a-significant-challenge-for-elon-musk-expert-161921664.html" # 发起请求时传入headers参数 r = requests.get(url, headers=headers) r.encoding = "utf-8" # 避免中文乱码 soup = BeautifulSoup(r.text, 'html.parser')
如果还是遇到拦截,可以给请求头补充从自己浏览器访问雅虎财经时提取的
Referer、Cookie参数。
第二步:精准定位正文段落,避免提取无关内容
雅虎财经的正文段落默认都放在class为caas-body的容器下,不要直接提取全局的<p>标签,避免拿到广告、导航栏的无关内容:
# 先定位正文容器 content_container = soup.find("div", class_="caas-body") if content_container: paragraphs = content_container.find_all("p") # 拼接正文内容 article_content = " ".join([p.text.strip() for p in paragraphs if p.text.strip()]) else: print("未获取到正文内容,请检查URL有效性或反爬拦截情况")
第三步:传入Pegasus模型生成摘要
拿到完整正文后,调用预训练模型做摘要生成,示例代码如下:
# 对正文做tokenize处理,控制输入长度 input_ids = tokenizer(article_content, return_tensors="pt", truncation=True, max_length=512).input_ids # 生成摘要,可根据需求调整max_length、num_beams参数 output = model.generate(input_ids, max_length=150, num_beams=5, early_stopping=True) # 解码输出摘要 summary = tokenizer.decode(output[0], skip_special_tokens=True) print("生成的摘要:", summary)
额外注意事项
- 不要短时间内发起大量请求,避免被雅虎封禁IP。
- 如果正文长度超过模型输入限制,可以先把正文拆分成多个片段分别生成摘要,再做二次整合。
内容的提问来源于stack exchange,提问作者DataWaz
相关产品推荐
相关产品推荐

