我的第乙個爬蟲程式

2021-09-25 13:23:03 字數 3161 閱讀 7828

最近開始迷上python了,當然,最讓我著迷的還是它的**風格,用一句話形容:乾淨利索脆。

由於我有一些vb基礎,現在學python感覺特別的輕鬆。

必須要強調一句:興趣是最好的老師

既然學寫爬蟲,先給自己定乙個小目標:爬一本**好了。

從「縱橫中文網」裡找了部章節少的《神魔武帝》練手,

別看就簡簡單單爬取一部**,中間還是鬧了不少「妖娥子」。

肯定是以import開始了,費話太多了,看**吧!

import requests

from lxml import etree

headers =

我使用的是requests庫,當然urllib庫也一樣的,蘿蔔鹹菜各有所愛。

差點忘了說,我使用的是python3.7版本。

由於我喜歡用xpath來解析,所以就載入了lxml庫。至於bs4,pyquery同樣那句話:蘿蔔鹹菜各有所愛

乙個標準爬蟲,還是在爬取網頁時加上headers吧!

url =

''response = requests.

get(url,headers=headers)

html = etree.

html

(response.content)

同樣是標準的寫法,用url存放**,用response接收網頁資料,用html存放被標準化的網頁。

srcs = html.

xpath

('//ul[@class="chapter-list clearfix"]/li/a/@href'

)tits = html.

xpath

('//ul[@class="chapter-list clearfix"]/li/a/text()'

)

為了搞懂xpath是如何解析的,現在看一下網頁源**:

......前面的省略......

[分卷閱讀]

第一卷 情天不壽共25章·本卷共85026字

......後面的省略......

我們要找到像「第一章 雪峰魂斷」這樣的章節資訊,就必須找到它的唯一可選父標籤,那麼就是最佳選擇,如果為父標籤,那麼它的子標籤就是的子標籤就是標籤,也就是我們要找的標籤。

我們用srcs存放網頁位址,用tits存放章節標題,這裡多說一句,tits接收資料有2種寫法:

1、tits = html.

xpath

('//ul[@class="chapter-list clearfix"]/li/a/text()'

)2、tits = html.

xpath

('//ul[@class="chapter-list clearfix"]/li/a/@title'

)

對比一下:

1 結果為: 第一章 雪峰魂斷
for src,tit in

zip(srcs,tits)

: response = requests.

get(src, headers=headers)

html = etree.

html

(response.content)

迴圈肯定要用for了,用src從**列表srcs裡逐一取出每個章節的**,tit取每個章節的標題。

with

open

(r'c:\python\book1.txt'

,'a'

,encoding=

'utf-8'

)as f:

f.write

('\n\n'

) f.

write

(tit +

'\n\n'

) content = html.

xpath

('//div[@class="content"]/p/text()'

)for x in content:

# 每段前加2個空格

f.write

(' '

+ x +

'\n'

)

這裡多說幾句,前面提到的「鬧了不少妖娥子」就是在儲存檔案時發生的。

with open(r'c:\python\book1.txt','a',encoding='utf-8') as f:
這句**我經常寫成:

with open(r'c:\python\book1.txt','a') as f:
看出什麼區別了嗎?引數encoding='utf-8'很重要啊!

第一次寫這個程式時,儲存到第13章時就出錯退出,錯誤資訊如下:

unicodeencodeerror: 'gbk' codec can't encode character '\xa0' in position 53: illegal multibyte sequence
只好列印出第13章的文字檢視,結果看到了這樣的情況:

「'真的是難以想象,這世界上真的還有這麼粗壯的樹。」\xa0', '碧靈兒一笑道:「恐怕它是這世界上最大的一棵樹了,走,我帶你去瞧瞧。」\xa0',
文字裡多出了」\xa0這樣的東西,也正是禍源所在。

content = html.xpath('//div[@class="content"]/p/text()')
取出文章內容的這句xpath,費了我不少腦細胞,一直不把當子標籤是我犯的最大的錯。

f.write('\n\n')
\n就是換行的意思

這句**就是加了2行空行,為了閱讀時方便。

#第一次寫文章,不足之處請多多海函。由於是新手,說的不對請高手指正!

我的第乙個爬蟲日誌

剛剛開始學習爬蟲,很多東西不懂,還望前輩們多多指教。總結流程 1 匯入相應的包 1 傳送 多頁在此不傳送頁碼,新編函式迴圈傳入新的頁碼 2 構建函式 1 傳送請求 2 伺服器的響應 3 讀取 編碼資訊 3 編寫正規表示式提取所需內容,括號內容具有唯一性 import urllib import ur...

我的第乙個程式

我的第乙個vc程式終於寫完了,花了2周,之前從沒有用vc寫過程式,也沒讀過什麼程式,只是在看書,看了幾百頁 mfc windows程式設計 正好有個機會,老師讓寫個vc程式,就試著寫了。程式的功能是不同地方的access的更新的記錄整合到一台機子上的access中,支援斷網自動連線,用的是socke...

我我,,我的第乙個爬蟲程式,竟然這麼有趣!!

今天,想要學習爬蟲,因此度娘一tong搜,爬蟲是個啥?爬蟲能做啥?咋用爬蟲做個好玩的東西?於是我搜了爬蟲遊戲,結果,我我我我。真的發現了好玩的東西。此處手動 笑哭 好玩的就是它,狂點此處 乙個爬蟲遊戲,你要對爬蟲有那麼點理解,就好比我,emmmm,就真的是只有一點理解,進去了,然後開始遊戲,按照步驟...