python3 小說爬取案例

2021-10-10 18:38:38 字數 3061 閱讀 5637

爬取**:

具體書籍:

res = requests.get(url, headers=header)  # 爬取網頁

web = res.text # 獲得網頁文字格式

正則匹配方法

(.*?)

匹配除了空格和換行之外的字元

([\s\s]*?)

上面的匹配方法無效的時候用這個匹配全部的字元,再用上面的方法進行匹配。

具體應用舉例:

pattern4 = re.compile(r'目錄')  # 匹配規則

contents = pattern4.findall(web)  # contens即是匹配到的內容

fo = open(title[0] + '.txt', "ab+")  # 開啟**檔案,前面是**名,後面是建立開啟方式

# 以二進位制寫入 需要轉換為utf-8編碼,否則會出現亂碼

fo.write(('\r' + text1[0] + '\n' + '\r').encode('utf-8'))

for i in text:

fo.write((i + '\n' + '\r').encode('utf-8')) # 逐行寫入

fo.close() # 關閉**檔案

print('爬取完畢')

break

有時候一本書爬取到一半的時候,爬取返回碼是200或503,獲取的文字不對,這可能是網路連線的問題,也可能是遇到了反爬。

畢竟有的網頁就算是人工進行操作換頁太快也可能會出現載入不出來的情況,所以設定乙個時間等待(time.sleep)來進行應對。

print(res) # 出錯狀態碼返回

k = k + 1 # 出錯次數

print('爬取出錯,請等待爬蟲繼續爬取', k)

time.sleep(5) # 等待 5s 後繼續爬取

res = requests.get(url + next_pg1) # 重新繼續爬取

web = res.text

continue

import time

import requests

import re

header = # 本來應該設定來做反爬的,結果貌似對這個**沒什麼作用。

url = '' # **首址

first_page = '/book_42837/15882282.html' # **首頁(書籍編號+第一章)

res = requests.get(url + first_page, headers=header) # 爬取網頁

web = res.text # 獲得網頁文字格式

pattern4 = re.compile(r'目錄') # 匹配規則

contents = pattern4.findall(web) # 獲取目錄,用於最後一頁判段

print('the first page is\n' + url + first_page) # 輸出首頁url

k = 0 # 出錯次數記錄(懷疑是反爬導致的出錯)

def download(web):

# 獲取正文

pattern = re.compile(r"

\n\u3000\u3000(.*?)。

") text = pattern.findall(web)

# 獲取首行

pattern1 = re.compile(r'

\r\n(.*?)

') text1 = pattern1.findall(web)

# print(text1)

# 獲取標題

pattern2 = re.compile(r'正文 (.*?)_')

title = pattern2.findall(web)

fo = open(title[0] + '.txt', "ab+") # 開啟**檔案,前面是**名,後面是建立開啟方式

# 以二進位制寫入 需要轉換為utf-8編碼,否則會出現亂碼

fo.write(('\r' + text1[0] + '\n' + '\r').encode('utf-8'))

for i in text:

fo.write((i + '\n' + '\r').encode('utf-8')) # 逐行寫入

fo.close() # 關閉**檔案

print('爬取《' + title[0] + '》成功')

# download(web)

while true:

pattern3 = re.compile(r'下一章')

if not next_pg: # 懷疑遇到了反爬,加入乙個時間間隔,用於反反爬

print(res) # 出錯狀態碼返回

k = k + 1 # 出錯次數

print('爬取出錯,請等待爬蟲繼續爬取', k)

time.sleep(5) # 等待 5s 後繼續爬取

res = requests.get(url + next_pg1) # 重新繼續爬取

web = res.text

continue

download(web) # 儲存本頁到本地txt

print('爬取完畢')

break

web = res.text # 獲取html文字

print('爬蟲出錯次數:', k)

1,利用\s\s幫助匹配在f12中看不見的**片段。

2,設定時間間隔,重新對出錯網頁進行爬取。

如果有幫助請多多支援!

Python爬取小說

感覺這個夠蛋疼的,因為你如果正常寫的話,前幾次執行沒問題,之後你連 都沒改,再執行就出錯了。其實這可能是網路請求失敗,或者有反爬蟲的東西吧。但這就會讓你寫的時候非常苦惱,所以這這東西,健壯性及其重要!import requests from bs4 import beautifulsoup impo...

python 爬取小說

前些天突然想看一些 可能是因為壓力大,所以就要有補償機制吧。為了節省流量,就想著把內容爬下來,然後就可以在路上看了。於是有了下面的指令碼。usr bin env python coding utf 8 import requests from lxml import etree 為了解決unicod...

python爬取小說

一 準備 安裝 requests pyquery庫 二 使用 定義了search類 初始化時傳入 第一章url 和 名即可 再呼叫all content方法即可 coding utf8 import re import requests from requests.exceptions import...