基本任務(wù):
I 搭建python開發(fā)環(huán)境
II 寫一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲罕邀,在某一個(gè)網(wǎng)站將一部小說(shuō)各章節(jié)(一般是一個(gè)章節(jié)一個(gè)網(wǎng)頁(yè))粘貼到一個(gè)文本文件內(nèi)夏伊。
1 首先了解幾個(gè)概念
1.1 網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)敛瓷,是搜索引擎的重要組成颜懊。
網(wǎng)絡(luò)爬蟲可以模擬瀏覽器瀏覽網(wǎng)頁(yè),自動(dòng)批量下載網(wǎng)絡(luò)資源(能夠訪問(wèn)到的避诽,放在網(wǎng)絡(luò)服務(wù)器的文件)龟虎。
傳統(tǒng)爬蟲從一個(gè)或若干初始網(wǎng)頁(yè)的URL開始,獲得初始網(wǎng)頁(yè)上的URL沙庐,在抓取網(wǎng)頁(yè)的過(guò)程中鲤妥,不斷從當(dāng)前頁(yè)面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件。聚焦爬蟲的工作流程較為復(fù)雜拱雏,需要根據(jù)一定的網(wǎng)頁(yè)分析算法過(guò)濾與主題無(wú)關(guān)的鏈接棉安,保留有用的鏈接并將其放入等待抓取的URL隊(duì)列。然后铸抑,它將根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的網(wǎng)頁(yè)URL贡耽,并重復(fù)上述過(guò)程,直到達(dá)到系統(tǒng)的某一條件時(shí)停止鹊汛。另外蒲赂,所有被爬蟲抓取的網(wǎng)頁(yè)將會(huì)被系統(tǒng)存貯,進(jìn)行一定的分析刁憋、過(guò)濾滥嘴,并建立索引,以便之后的查詢和檢索至耻;對(duì)于聚焦爬蟲來(lái)說(shuō)若皱,這一過(guò)程所得到的分析結(jié)果還可能對(duì)以后的抓取過(guò)程給出反饋和指導(dǎo)。
在這里還是要推薦下我自己建的Python開發(fā)學(xué)習(xí)群:483546416尘颓,群里都是學(xué)Python開發(fā)的走触,如果你正在學(xué)習(xí)Python ,小編歡迎你加入疤苹,大家都是軟件開發(fā)黨互广,不定期分享干貨(只有Python軟件開發(fā)相關(guān)的),包括我自己整理的一份2018最新的Python進(jìn)階資料和高級(jí)開發(fā)教程痰催,歡迎進(jìn)階中和進(jìn)想深入Python的小伙伴
1.2 小說(shuō)網(wǎng)站的基本結(jié)構(gòu)
首頁(yè)(總目錄)→分類→小說(shuō)目錄頁(yè)→小說(shuō)各章節(jié)兜辞;
1.3 與網(wǎng)站的交互
通常都是用戶通過(guò)瀏覽器(當(dāng)IE)訪問(wèn)網(wǎng)站(網(wǎng)絡(luò)上的服務(wù)器)。
瀏覽器:網(wǎng)址(href)夸溶、請(qǐng)求(requests)→網(wǎng)站服務(wù)器:響應(yīng)(response)給瀏覽器→瀏覽器:緩存并呈現(xiàn)回復(fù)的內(nèi)容逸吵。
1.4 開發(fā)環(huán)境
用高級(jí)語(yǔ)言寫的代碼需要解釋或編碼到機(jī)器代碼,才能被計(jì)算機(jī)執(zhí)行缝裁。
所以開發(fā)一個(gè)程序扫皱,最基本的需求是一個(gè)文本編輯器(寫)和解釋器或編譯器足绅。
開發(fā)復(fù)雜的程序,需要調(diào)試查錯(cuò)韩脑、需要引入第三方庫(kù)氢妈,需要邊結(jié)各文件,所以段多,一般來(lái)說(shuō)首量,一個(gè)簡(jiǎn)單的文本編輯器加一個(gè)解釋器或編譯器是不夠的,需要一個(gè)支持某種高級(jí)語(yǔ)言的調(diào)試器的較復(fù)雜的編輯器进苍。這樣的編輯器同時(shí)還支持可以方便寫代碼(如顏色分類顯示加缘、代碼提示)的插件加入。
2 搭建python開發(fā)環(huán)境
2.1 下載和安裝解釋器python3.6
2.1.1 python解釋器下載地址:https://www.python.org/downloads/release/python-365/
2.1.2 關(guān)于環(huán)境變量path觉啊,就是可以保證執(zhí)行python命令時(shí)拣宏,不需要輸入安裝路徑。在安裝時(shí)如果有直接勾選了"add python to path"則在安裝時(shí)即自動(dòng)配置了path的安裝路徑杠人;
path變量中有了安裝路徑后勋乾,即可直接在CMD中輸入python,可以看到相關(guān)反饋相信嗡善,即表示安裝和環(huán)境變量配置OK了辑莫;
如果不安裝代碼編輯器或?qū)S肐DE,也可以在CMD中輸入python,進(jìn)行交互式開發(fā)滤奈;
2.2 下載和安裝代碼編輯器加調(diào)試器:pycharm4
PyCharm 由著名的JetBrains公司開發(fā)摆昧,帶有一整套可以幫助用戶在使用Python語(yǔ)言開發(fā)時(shí)提高其效率的工 具撩满,比如調(diào)試蜒程、語(yǔ)法高亮、Project管理伺帘、代碼跳轉(zhuǎn)昭躺、智能提示、自動(dòng)完成伪嫁、單元測(cè)試领炫、版本控制。此外张咳,該IDE提供了一些高級(jí)功能帝洪,以用于支持Django框架下的專業(yè)Web開發(fā)。
2.2.1 代碼編輯器pycharm下載地址http://www.jetbrains.com/pycharm/download/#section=windows
2.2.2進(jìn)入激活界面脚猾,選擇第二個(gè)License server葱峡,之后在License server address中隨意輸入下面兩個(gè)注冊(cè)碼中的任意一個(gè)即可,http://idea.liyang.io或http://xidea.online龙助。
激活后的狀態(tài):
3 添加第三方模塊
第三方模塊添加工具pip必須在安裝python3.5時(shí)有勾選安裝砰奕。
編輯或新建C:Userswwuhnwu01pippip.ini:
[global]
respect-virtualenv = true
download-cache = f:/Python/pip/cache
log-file = f:/Python/pip/pip.log
[install]
timeout = 30
find-links = http://pypi.douban.com
find-links = http://pypi.douban.com/simple
pycharm→文件→setting→project interpreter→pip→右邊加號(hào)+→manage repositories→右邊加號(hào)+→添加第三方模塊的鏡像服務(wù)器http://pypi.douban.com/和http://pypi.douban.com/simple
如果還是連接不上第三方模塊服務(wù)器,有時(shí)需要重啟一下pycharm。
4 一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲
3.1 新建項(xiàng)目
3.2 設(shè)置項(xiàng)目編譯器
基本的思路:
進(jìn)入一個(gè)小說(shuō)的目錄頁(yè)军援,請(qǐng)求到目錄(包括各章節(jié)的href和章節(jié)標(biāo)題)的內(nèi)容仅淑,提取到全部的href,再通過(guò)各href請(qǐng)求到各網(wǎng)頁(yè)的內(nèi)容胸哥,經(jīng)過(guò)數(shù)據(jù)清洗和適當(dāng)?shù)幕氐窖木梗瑢懭氲揭粋€(gè)文本文件
代碼:
以上代碼運(yùn)行后,即可把整部小說(shuō)的內(nèi)容寫入文本文件空厌。
不同的網(wǎng)站昆禽,內(nèi)面內(nèi)容的寫法會(huì)有差別,在提取數(shù)據(jù)和清洗數(shù)據(jù)時(shí)要做相應(yīng)調(diào)整變化蝇庭。
一些網(wǎng)站會(huì)禁止爬蟲醉鳖,當(dāng)你嘗試爬取網(wǎng)站資源時(shí),一些網(wǎng)站會(huì)有反爬策略哮内,將你的IP加入黑名單盗棵,當(dāng)你爬取或訪問(wèn)時(shí),頁(yè)面會(huì)響應(yīng)為:“HTTP Error 403: Forbidden錯(cuò)誤”北发。
附源代碼:
import requests
import re
# 1 獲取小說(shuō)目錄頁(yè)
url = 'http://www.xiaoshuotxt.org/wuxia/1617/'
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
title = re.findall(r'
# 4 數(shù)據(jù)持久化,寫入txt)
fb = open('%s.txt'%title, 'w', encoding='utf-8');
# 2 提取章節(jié)
menu = re.findall(r'正文(.*?)',html)[0]
chapter_info_list = re.findall(r'(.*?)',menu)
# 3 循環(huán)訪問(wèn)章節(jié)纹因,并獲取內(nèi)容
for chapter_info in chapter_info_list:
chapter_url = chapter_info[0]
chapter_title = chapter_info[1]
if 'http' not in chapter_url:
chapter_url = 'http://www.xiaoshuotxt.org%s' % chapter_url
chapter_response = requests.get(chapter_url)
chapter_response.encoding = 'utf-8'
chapter_html = chapter_response.text
# 數(shù)據(jù)提取
chapter_content = re.findall(r'
# 數(shù)據(jù)清洗(按頁(yè)面規(guī)律)
chapter_content = chapter_content.replace(' ','')
chapter_content = chapter_content.replace('
','')
# 數(shù)據(jù)持久化(寫入txt),先要在前面新建文件
fb.write(chapter_title)
fb.write(' ')
fb.write(chapter_content)
fb.write(' ')
#用以下語(yǔ)句可以看到動(dòng)態(tài)過(guò)程
print(chapter_url)
-End-