一日一技:如何提取網(wǎng)頁中的日期?
Gne[1]雖然在提取新聞?wù)牡臅r(shí)候,準(zhǔn)確率比較高,但由于提取新聞發(fā)布時(shí)間使用的是正則表達(dá)式,因此提取效果有時(shí)候不那么讓人滿意。
最近我發(fā)現(xiàn)Python的一個(gè)第三方庫,叫做htmldate,經(jīng)過測試,它提取新聞的發(fā)布時(shí)間比較準(zhǔn)確。我們來看看這個(gè)庫怎么使用。首先使用pip安裝:
python3 -m pip install htmldate
然后,我們使用Requests或者Selenium獲得網(wǎng)站的源代碼:
import requests
from htmldate import find_date
html = requests.get('https://www.kingname.info/2022/03/09/this-is-gnelist/').content.decode('utf-8')
date = find_date(html)
print(date)
運(yùn)行效果如下圖所示:
而這篇文章的發(fā)布時(shí)間,確實(shí)是3月9號:
我們再用網(wǎng)易新聞來看一下,相互激勵(lì) 增進(jìn)友誼(精彩綻放) |殘奧|中國代表團(tuán)|單板滑雪|奪金_網(wǎng)易政務(wù)[2] 這篇新聞對應(yīng)的發(fā)布時(shí)間如下圖所示:
現(xiàn)在我們用Requests獲得它的源代碼,然后再提取發(fā)布時(shí)間:
發(fā)布日期確實(shí)對了,但是后面的時(shí)間怎么丟失了呢?如果想把時(shí)分秒保留下來,可以增加一個(gè)參數(shù)outputformat,它的值就是你在datetime.strftime里面輸入的值:
find_date(html, outputformat='%Y-%m-%d %H:%M:%S')
運(yùn)行效果如下圖所示:
find_date的參數(shù),除了網(wǎng)頁源代碼外,還可以傳入U(xiǎn)RL,或者是lxml里面的Dom對象,例如:
from lxml.html import fromstring
selector = fromstring(html)
date = find_date(selector)
參考文獻(xiàn)[1] Gne: https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
[2] 相互激勵(lì) 增進(jìn)友誼(精彩綻放) |殘奧|中國代表團(tuán)|單板滑雪|奪金_網(wǎng)易政務(wù): https://www.163.com/news/article/H28Q6NQ1000189FH.html