python實現(xiàn)簡單的爬蟲

目標(biāo):爬取虎嗅網(wǎng)24小時新聞,存入數(shù)據(jù)庫。分析熱詞
方案:爬蟲有多種方案,我們采取requests + lxml/xpath的方案。

1. 使用到的工具

requests

一個簡單好用的網(wǎng)絡(luò)請求庫

lxml/xpath
lxml是python的一個解析庫,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
XPath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言,它最初是用來搜尋XML文檔的,但是它同樣適用于HTML文檔的搜索
XPath的選擇功能十分強(qiáng)大,它提供了非常簡明的路徑選擇表達(dá)式,另外,它還提供了超過100個內(nèi)建函數(shù),用于字符串、數(shù)值、時間的匹配以及節(jié)點、序列的處理等,幾乎所有我們想要定位的節(jié)點,都可以用XPath來選擇
django

一個web框架,此處用來操作數(shù)據(jù)庫。

2. 大致步驟

  1. 分析目標(biāo)網(wǎng)頁,制定爬取策略。
  2. 寫代碼爬取數(shù)據(jù)。
  3. 保存數(shù)據(jù)。

1. 分析目標(biāo)網(wǎng)頁,制定爬取策略。

分析網(wǎng)頁源碼,使用瀏覽器、charles等分析接口請求。一般大量列表的網(wǎng)頁的分頁大致有兩種:

  1. 網(wǎng)址分頁,即網(wǎng)址中傳page來請求,一頁一個鏈接。https://www.kuaidaili.com
  2. 使用ajax一個界面實現(xiàn)分頁。https://www.huxiu.com/moment

虎嗅的24小時列表采用的是ajax加載的。

#接口:
https://www.huxiu.com/moment/ajaxGetList
#參數(shù):
last_dateline
#返回數(shù)據(jù)
{
    "success": true,
    "data": {
        "msg": "獲取成功",
        "pagesize": 20,
        "total_page": 149,
        "last_dateline": "1558238914",
        "data": " html內(nèi)容 "
    }
}

他們是以時間來分頁的,返回結(jié)果包含下次的請請求時間,可以以此來循環(huán)請求獲取數(shù)據(jù)。
返回的數(shù)據(jù)是一個<li>新聞列表,我們只需要遍歷每個li,從中取到數(shù)據(jù)即可。

2. 寫代碼爬取數(shù)據(jù)

  • 獲取源碼:
res = requests.post(url, headers=headers, data=data)
res.encoding = 'utf-8'
return res.text
路徑表達(dá)式
nodename選取此節(jié)點的所有直子節(jié)點,相當(dāng)于./
/  選取子節(jié)點
//  選取子孫節(jié)點

.  從當(dāng)前節(jié)點
..  從當(dāng)前節(jié)點的父節(jié)點

@選取屬性
  • 創(chuàng)建數(shù)據(jù)庫:

使用Django框架操作數(shù)據(jù)庫,步驟:
1,創(chuàng)建好model。
2,執(zhí)行創(chuàng)建命令。

python manage.py makemigrations
python manage.py migrate

3. 爬取注意

有道德,注意爬取速度
應(yīng)對反爬蟲:

  • header隨機(jī)User-Agent;
  • 隨機(jī)延時;
  • 使用代理

代理分類
判斷是否使用成功:http://httpbin.org/get

4. 生成詞云圖,分析熱點

使用wordcloud

1, 數(shù)據(jù)庫讀取數(shù)據(jù);
2,wordcloud分析;

代碼地址

image

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容