內(nèi)容頁結構:
以這篇文章為例子:
http://news.sina.com.cn/c/2017-09-05/doc-ifykpzey4568845.shtml
因為簡短,方便觀看演示:
GET請求:
http://news.sina.com.cn/c/2017-09-05/doc-ifykpzey4568845.shtml
現(xiàn)在的代碼:
抓取標題:
title = soup.select('#artibodyTitle')[0].text
抓取時間:
涉及到拆分的過程:
.contents的用法:
拆分成兩個部分
.strip()的用法:
移除特殊字符
時間格式轉(zhuǎn)化:
from datetime import datetime
字符串轉(zhuǎn)時間:----strptime
Dt = datetime.strptime(timesource,’%Y年%m月%d日%H:%M’)
Dt
這樣我們就可以將數(shù)據(jù)轉(zhuǎn)化并以正確的格式存儲到數(shù)據(jù)庫沪哺。
時間轉(zhuǎn)字符串:
Dt.strftime(‘%Y-%m-%d’)
抓取文章來源:
source = soup.select('.time-source span a')[0].text
抓取文章正文:
正文抓取去除最后的“責任編輯”
后綴加上[:-1]即可:
article = soup.select('#artibody p')[:-1]
為了將所有的文字內(nèi)容合并:
去除‘\u3000’,只需要使用.strip()
.join()合并列表為字符串:
上圖是以一個空格連接內(nèi)容
至此代碼:
article = []
for p in soup.select('#artibody p')[:-1]:
article.append(p.text.strip())
articles = ' '.join(article)
print(articles)
說明:
為啥搞得那么復雜,其實是為了大家更充分理解各種正則操作杜顺,在實際的抓取網(wǎng)頁時,一般是會將HTML標簽等一同抓取。
更簡單的寫法:
獲取作者:
editor = soup.select('.article-editor')[0].text.lstrip('責任編輯:')
移除責任編輯:
.strip(‘責任編輯:’)
或者:lstrip('責任編輯:')
獲取評論數(shù):
按照常規(guī)方法:
結果為空洛勉?
想到評論數(shù)可能是JavaScript動態(tài)加載的棒厘!
通過開發(fā)者工具找到:
分析URL纵穿,將改為:
如何獲取新聞id:
#url處理
newsurl = 'http://news.sina.com.cn/c/2017-09-05/doc-ifykpzey4568845.shtml'
newsid = newsurl.split('/')[-1].rstrip('.shtml').lstrip('doc-')
print(newsid)
或者re正則表達:
JSON數(shù)據(jù)解析獲取評論數(shù)量:
comments = requests.get('http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-fykpzey4568845&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20')
jd = json.loads(comments.text.strip('var data='))
print(jd['result']['count']['total'])
整理如下:
注:本文屬于原創(chuàng)文章,創(chuàng)作不易奢人,轉(zhuǎn)載請注明本文地址谓媒!
作者QQ:1099718640
CSDN博客主頁:http://blog.csdn.net/dyboy2017
Github開源項目:https://github.com/dyboy2017/spider