定向爬蟲(1) 第乙個單執行緒爬蟲

2021-10-09 01:31:19 字數 4173 閱讀 4999

看了好幾天的爬蟲,終於有點眉目,於是寫了第乙個單執行緒爬蟲,問題很多,但功能基本實現了
簡單記錄一下,以後可以翻看回憶

這裡爬取的是努努書坊的《龍族五》,原網頁鏈結如下:

先擼一下基本框架結構:

1)使用request獲取網頁原始碼

2)使用正規表示式提取內容

3)檔案操作,寫入檔案儲存檔案

檢查網頁元素,很容易可以找出特別的地方,

.........

正文第1章 全民公敵(1)

第153章 但為君故(57)

這一塊就是主頁的目錄部分,可以從中提取出每一章節的連線位址,這裡提出來的是邏輯位址,後續用到的時候需要轉化為絕對位址

如 a href=「197940.html」>第152章 但為君故(56) // 197940.html 就是我們想要的位址

這就是第乙個功能的實現思路,提取出每個章節的位址

**如下:

`def get_toc(html):

「」"

:param html: 傳入網頁原始碼

:return: 輸出每一章節的絕對鏈結

"""toc_url_list =

toc_block = re.findall('正文(.*?)第', toc_block, re.s)

for url in toc_l:

return toc_url_list`

然後是第二部分,依次遍歷每乙個網頁,獲取原始碼後提取章節目錄,然後提取章節內容

def

get_text

(toc_list)

:"""

依次請求獲取每個章節的原網頁,然後依次存入章節列表中

:param toc_list: 每一章節的位址

:return: heard-章節名,text-章節文字

"""heard_list =

text_list =

for toc in toc_list:

html_text = requests.get(toc)

.content.decode(

"gbk"

) heard = re.search(

'h1>(.*?)

', html_text, re.s)

.group(1)

text = re.search(

'', html_text, re.s)

.group(1)

# text_temp_1 = text.replace('', '')

# text_temp_2 = text_temp_1.replace('    ', '')

text_temp1 = re.findall(

'(.*?    )'

,text,re.s)

text_temp_2 = text.replace(text_temp1[1]

,'')return heard_list, text_list

這一部分也比較容易理解,最後一部分就是寫入操作,這裡匯入os模組是為了方便寫入時路徑的查詢
def

write_text

(heard, text_list)

:"""

:param heard:章節名

:param text: 章節內容

:return:

"""os.makedirs(

'龍族v'

, exist_ok=

true

)for i in

range

(len

(heard)):

chart = heard[i]

text = text_list[i]

with

open

(os.path.join(

'龍族v'

, chart +

'.txt'),

'w', encoding=

'utf-8'

)as f:

f.write(text)

到這裡程式就完了,有個問題是每一章節的開頭「    」部分沒有被替換完,後續可以圖形介面操作也比較容易

缺點是單執行緒的話run的比較慢,寬頻只能跑30kp左右,明天會改進多執行緒

結果如下

:param html: 傳入網頁原始碼

:return: 輸出每一章節的絕對鏈結

"""toc_url_list =

toc_block = re.findall(

'正文(.*?), html, re.s)[0

] toc_l = re.findall(

'a href="(.*?)">第'

, toc_block, re.s)

for url in toc_l:

return toc_url_list

defget_text

(toc_list)

:"""

依次請求獲取每個章節的原網頁,然後依次存入章節列表中

:param toc_list: 每一章節的位址

:return: heard-章節名,text-章節文字

"""heard_list =

text_list =

for toc in toc_list:

html_text = requests.get(toc)

.content.decode(

"gbk"

) heard = re.search(

'h1>(.*?)

', html_text, re.s)

.group(1)

text = re.search(

'', html_text, re.s)

.group(1)

# text_temp_1 = text.replace('', '')

# text_temp_2 = text_temp_1.replace('    ', '')

text_temp1 = re.findall(

'(.*?    )'

,text,re.s)

text_temp_2 = text.replace(text_temp1[1]

,'')return heard_list, text_list

defwrite_text

(heard, text_list)

:"""

:param heard:章節名

:param text: 章節內容

:return:

"""os.makedirs(

'龍族v'

, exist_ok=

true

)for i in

range

(len

(heard)):

chart = heard[i]

text = text_list[i]

with

open

(os.path.join(

'龍族v'

, chart +

'.txt'),

'w', encoding=

'utf-8'

)as f:

f.write(text)

if __name__ ==

'__main__'

: toc_list = get_toc(html)

heard, text = get_text(toc_list)

write_text(heard, text)

python爬蟲 第乙個爬蟲

1.本地安裝了nginx,在預設的html目錄下建立測試html 如圖,即index.html導向a,b,c 3個html,a.html又可以導向aa,bb兩個html,c.html可以導向cc.html。2.修改nignx配置使得本地可以訪問寫的kmtest裡的index.html。參考文件 ng...

第乙個爬蟲

很多人學習python的目的就是為了學習能夠實現爬蟲的功能,這裡,我使用了scrapy框架來實現了乙個簡單的爬蟲功能,這裡我簡單的介紹一下scrapy專案的建立,和執行。1,第一步是安裝scrapy,我相信到了這一步,大多數人都已經會安裝第三方庫檔案了,這裡主要是使用命令pip install sc...

第乙個爬蟲

一 程式測試 二 開啟360網頁 三 html計算 四 中國大學排名 爬取年費2018 五 函式介紹總結 1.requests 庫的網頁請求函式 函式 說明 get url timeout n 對應http的get方式,設定請求超時時間為n秒 post url,data 對應http的post方式,...