這兩天分析了一下頭條文章網頁的源文件,現在將分析的結果分享給大家。
首先以一篇文章為例,其網址如下:
https://www.toutiao.com/i6822245428176617998/
如上圖網頁所示,文章中包含文字和圖片。
下面來看一下頁面的源文件,發現正文的內容沒有在常規的
標籤內,而是在標籤中,如下圖所示:這次不使用BeautifulSoup來解析頁面,直接使用find()命令在源碼中定位,提取源碼中的title和content內容。
首先用requests請求頁面,查看返回結果,如下圖:
通過查看文章標題和正文的上下代碼,發現articleInfo和subInfo是源碼中唯一標籤屬性信息,這樣可以在源碼的基礎上提取它們之間的代碼信息,即含有文章標題和正文內容。且在title和content的結尾有代碼slice(6,6),這是去除字符串前6和後6的字符串,保留中間值。
定義get_title_content()函數,實現提取title和content信息,具體代碼如下:
get_title_content()函數源碼:
<code># 提取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]/<code>
主函數運行代碼(省略了請求網頁的代碼):
<code>\t\t# 提取title和content
title,content = get_title_content(r.text)
print(title)
print(content)/<code>
代碼運行結果如下:
如上圖所示,content的內容中包含了\\\\u003c、\"等特殊字符,下面該研究如何將這些特殊字符轉為常規的字符。
突然感覺時間不夠用啊,花了兩天功夫才提取了文章的標題和正文,每天只有晚上一點點時間來研究Python,時間好少的感覺有木有。
今天就到這裡了,明天繼續研究,如何將content內容中的特殊字符串轉成常規的字符串。
感興趣的朋友可以關注一下哈,和我一起來嘗試將頭條文章保存到本地存儲。有經驗的朋友可以多提提意見哈。
最近網上各種版權事件飛起,什麼合法不合法的,什麼侵犯權益的啊,好煩的有木有。本文在這裡加一個免責說明吧,本文純屬用於學習、研究、探討,不做商業用途,如果有侵權或其他違法情況,可以聯繫我刪除,謝謝。
閱讀更多 居家IT男 的文章