这两天分析了一下头条文章网页的源文件,现在将分析的结果分享给大家。
首先以一篇文章为例,其网址如下:
https://www.toutiao.com/i6822245428176617998/
如上图网页所示,文章中包含文字和图片。
下面来看一下页面的源文件,发现正文的内容没有在常规的<p></p>标签内,而是在<script></script>标签中,如下图所示:
这次不使用BeautifulSoup来解析页面,直接使用find()命令在源码中定位,提取源码中的title和content内容。
首先用requests请求页面,查看返回结果,如下图:
通过查看文章标题和正文的上下代码,发现articleInfo和subInfo是源码中唯一标签属性信息,这样可以在源码的基础上提取它们之间的代码信息,即含有文章标题和正文内容。且在title和content的结尾有代码slice(6,6),这是去除字符串前6和后6的字符串,保留中间值。
定义get_title_content()函数,实现提取title和content信息,具体代码如下:
get_title_content()函数源码:
# 提取title和content
def get_title_content(text):
# 查找articleInfo
articleInfo_id = r.text.find("articleInfo")
subInfo_id = r.text.find("subInfo")
articleInfo = r.text[articleInfo_id:subInfo_id]
# 查找articleInfo中的title和content
title_id = articleInfo.find("title")
content_id = articleInfo.find("content")
groupId_id = articleInfo.find("groupId")
title = articleInfo[title_id:content_id].split("'")[1]
content = articleInfo[content_id:groupId_id].split("'")[1]
return title[6:-6],content[6:-6]
主函数运行代码(省略了请求网页的代码):
# 提取title和content
title,content = get_title_content(r.text)
print(title)
print(content)
代码运行结果如下:
如上图所示,content的内容中包含了\u003c、\"等特殊字符,下面该研究如何将这些特殊字符转为常规的字符。
突然感觉时间不够用啊,花了两天功夫才提取了文章的标题和正文,每天只有晚上一点点时间来研究Python,时间好少的感觉有木有。
今天就到这里了,明天继续研究,如何将content内容中的特殊字符串转成常规的字符串。
感兴趣的朋友可以关注一下哈,和我一起来尝试将头条文章保存到本地存储。有经验的朋友可以多提提意见哈。
最近网上各种版权事件飞起,什么合法不合法的,什么侵犯权益的啊,好烦的有木有。本文在这里加一个免责说明吧,本文纯属用于学习、研究、探讨,不做商业用途,如果有侵权或其他违法情况,可以联系我删除,谢谢。