这个解决方案是直接用Jina.AI的Reader API把整个静态页面的内容都扒下来。(初心是喂给LLM当语料。我也确实是拿来干这个的。符合初心!)
实现起来很简单,但是局限比较大。但是实现起来真的很简单。
API官网:Reader API
简单来说就是直接给了https://r.jina.ai/{target_url}这个接口,直接用get访问就返回网页中的内容信息,以JSON格式返回信息,网页内容是Markdown形式,图片都是配好标题和对应链接的。(但是我这回用不到图片,所以没管这个功能)
非静态页面的不能用这个。那些网站我以后再处理。
举例,如我们随机找一个360doc文章www.360doc.com/content/24/…,直接进入r.jina.ai/www.360doc.…就能看到:
之前用代码直接返回的格式略有差别,现在统一了,所以代码直接这么写:
import requests
target_url = "http://www.360doc.com/content/24/0324/01/70543001_1118191805.shtml"
url = "https://r.jina.ai/" + target_url
response = requests.get(url, headers=headers)
data = response.text
response = requests.get(url)
data = response.text
# 打印响应内容
with open("example.txt", "w", encoding="utf-8") as file:
file.write(data)
就可以看到内容已经输出到文本文件中(输出会有一点差异,我懒得改了):
有时候一两次可能出不来正确的结果,建议的解决方案是多跑几次。如果多跑几次依然跑不出来那大概也许确实是没法用Reader API抓,可以考虑尝试使用别的方案。
实测可以用Reader API直接爬单篇文章的网站:
- 360doc / 个人图书馆
- 搜狐网
- 可圈可点组卷-网站首页>>包含初中 高中 物理 化学 数学 语文 英语 生物 历史 政治 地理-web组卷
- 知乎
实测爬不了的网站:
- 百度百科(会直接给你跳转到百度推广联盟……我真是服了,不愧是百度,想用简单的爬虫对付爬虫头子是否有点鲁班门前弄大斧了)