簡介
- 36氪新聞爬蟲
- 主要功能為 爬取各分類標(biāo)簽下的文章
- 基于Scrapy框架
- 采用MongoDB數(shù)據(jù)庫儲存
運(yùn)行
需要安裝
- Scrapy
- pip
- lxml
- pywin32
- Zope.Interface
- Twisted
- pyOpenSSL
- MongoDB(最下面有Win的教程)
- 數(shù)據(jù)庫可視化工具(可選,推薦
Studio 3T
) - Python
pymongo
庫
cmd或編譯器下直接執(zhí)行main.py
文件即可。
目錄結(jié)構(gòu)
-
spiders
-
a36kr
爬蟲主要文件
-
items
數(shù)據(jù)結(jié)構(gòu)化容器piplines
管道(用于處理數(shù)據(jù))middlewares
爬蟲中間構(gòu)件(未編輯)settings
爬蟲配置文件
爬取思路
內(nèi)容部分
36氪網(wǎng)站主體部分的DOM采用JavaScript生成,并且新聞列表、文章內(nèi)容等均采用JSON格式通信保存,因此無法使用Scrapy提供的Selector
選擇器。
故對JSON數(shù)據(jù):
- 使用正則表達(dá)式來匹配JSON的內(nèi)容
- 去除JSON數(shù)據(jù)中多余的HTML標(biāo)簽
- 然后使用
json
庫將其格式化
翻頁部分
通過觀察Network可以發(fā)現(xiàn) http://36kr.com/api/tag/yiliaojiankang?page=2&ts=1500286828&per_page=20&_=1500286832385 為api接口地址。其中ts
與_
每次刷新都不一樣。
四個(gè)參數(shù)中一眼可以看出其中兩個(gè)甚至是三個(gè)的作用。測試得知ts
參數(shù)不得刪除,否則無法翻頁。
ts
簡單想一下覺得可能是時(shí)間戳,使用時(shí)間戳轉(zhuǎn)換工具驗(yàn)證后即可確定。
_
參數(shù)通過觀察,前幾位與時(shí)間戳一樣,后幾位不同,而且比時(shí)間戳多了幾位。時(shí)間戳后幾位為秒數(shù)位,多的位猜測為毫秒精度,初步猜測_
參數(shù)為與第一次訪問的時(shí)間間隔。
將與時(shí)間戳不同的部分通過時(shí)間戳轉(zhuǎn)換工具直接轉(zhuǎn)化(秒級)得到1970/1/1 16:59:45
短暫時(shí)間后變?yōu)?code>1970/1/2 15:13:5,時(shí)間跨度過大。調(diào)整為毫秒級后年月固定在1970/1/1
,時(shí)間部分與現(xiàn)在時(shí)間一致,得出結(jié)論:_
為此刻時(shí)間的時(shí)間戳。
地址中四個(gè)參數(shù):
-
page
—— *頁碼 -
ts
—— *首次訪問頁面的時(shí)間戳(秒級) -
per_page
—— *列表中新聞個(gè)數(shù) -
_
—— 現(xiàn)在時(shí)刻的時(shí)間戳(毫秒級)
經(jīng)測試,其中帶*
的為必須參數(shù),若缺少ts
參數(shù)則無法翻頁。
數(shù)據(jù)庫
Windows下MongoDB安裝
手動(dòng)創(chuàng)建文件夾
C:\Program Files\MongoDB\data\db
C:\Program Files\MongoDB\log
分別用來安裝db和日志文件,在log文件夾下創(chuàng)建一個(gè)日志文件MongoDB.log,即
C:\Program Files\MongoDB\log\MongoDB.log
cd C:\Program Files\MongoDB\Server\3.4\bin
mongod -dbpath "C:\Program Files\MongoDB\data\db"
測試:新開一個(gè)cmd窗口,進(jìn)入MongoDB的bin目錄,輸入mongo
或者mongo.exe
最后,為了以后方便快速啟動(dòng),將MongoDB添加到Windows的服務(wù)
中:
添加服務(wù)
mongod --dbpath "C:\Program Files\MongoDB\data\db" --logpath "C:\Program Files\MongoDB\log\MongoDB.log" --install --serviceName "MongoDB"
啟動(dòng)服務(wù)
C:\Program Files\MongoDB\Server\3.4\bin>net start MongoDB
停止服務(wù)
C:\Program Files\MongoDB\Server\3.4\bin>net stop MongoDB
刪除服務(wù)
mongod --dbpath "C:\Program Files\MongoDB\data\db" --logpath "C:\Program Files\MongoDB\log\MongoDB.log" --remove --serviceName "MongoDB"
聲明
本爬蟲為個(gè)人學(xué)習(xí)使用。若有不當(dāng),請指教,會(huì)立刻刪除