說明:
? ? ? ? 本教程僅供于學(xué)習(xí)研究使用,請勿用于其他用途。
軟件安裝:
官網(wǎng)下載visual studio?Visual Studio: 面向軟件開發(fā)人員和 Teams 的 IDE 和代碼編輯器 (microsoft.com)
點(diǎn)進(jìn)網(wǎng)頁后下拉找到個(gè)人免費(fèi)版本。點(diǎn)擊下載即可。
1:找到瀏覽器下載位置,2:選擇打開下載文件位置、3:選擇雙擊運(yùn)行安裝程序
點(diǎn)擊繼續(xù)
等待下載完成后,勾選對python 的開發(fā)。
最后等待安裝完畢即可。
新建工程:
一般安裝完成后桌面是沒有圖標(biāo)的的我們要去系統(tǒng)欄進(jìn)行搜索。
選擇創(chuàng)建新項(xiàng)目。
1、點(diǎn)擊下拉選項(xiàng),2、找到python 項(xiàng)目
1、選擇python應(yīng)用程序,2、點(diǎn)擊確定
1、程序名稱,2、程序存放位置,可自行修改,3、勾選,4、創(chuàng)建
創(chuàng)建后如以下界面:
輸入測試代碼:
print("hello world")
點(diǎn)擊啟動按鈕
查看運(yùn)行結(jié)果。
到此我們的新建工程就完畢。
導(dǎo)入python 包:
需要導(dǎo)入的第三方包有兩個(gè),是requests和BeautifulSoup,其中一個(gè)是用于網(wǎng)頁請求的,一個(gè)是網(wǎng)頁解析的。
import requests
from bs4 import BeautifulSoup
直接運(yùn)行會報(bào)以下錯(cuò)誤。
錯(cuò)誤的含義是沒有找到對應(yīng)的模塊。我們要先下載相關(guān)的第三方包。
首先我們關(guān)閉調(diào)試模式后,點(diǎn)擊工具-》python-》python環(huán)境
1、右側(cè)輸入requests,2、點(diǎn)擊安裝運(yùn)行命令?pip install requests
如果彈出提升權(quán)限點(diǎn)擊立即提升即可
顯示此提升表明安裝第三方包成功了
同樣的步驟導(dǎo)入bs4
如果是其他編譯環(huán)境就就采用以下命令即可。
pip install requests
pip install bs4
?判斷爬取網(wǎng)頁的編碼格式:
定義一個(gè)字符串變量內(nèi)容為需要爬取的小說主頁。
# 小說的URL
url = 'https://www.nfxs.com/book/126295/'
字符串來源于百度搜索
?其他小說的話需要更換這個(gè)即可。
首先發(fā)起一個(gè)請求,并通過BeautifulSoup解析出來。
# 請求的URL是'url',這里的'url'只是一個(gè)占位符,你需要把實(shí)際的URL替換進(jìn)去
response = requests.get(url)
# 設(shè)置響應(yīng)的編碼為'utf-8',這樣獲取到的文本內(nèi)容就會是'utf-8'編碼
response.encoding = 'utf-8'
# 導(dǎo)入BeautifulSoup庫,這個(gè)庫是Python中用來解析HTML或XML的庫
# 用BeautifulSoup庫的'html.parser'解析器來解析從URL獲取到的HTML內(nèi)容
soup = BeautifulSoup(response.text, 'html.parser')
print(soup)
運(yùn)行結(jié)果如下這是編碼格式正確可以進(jìn)行下一步了。
文中沒有亂碼是一個(gè)正常的頁面返回。
下面是編碼格式錯(cuò)誤的,我們需要手動調(diào)整。
最常用的兩種格式。
response.encoding = 'utf-8'
或者
response.encoding = 'gb2312'
到這里我們的編碼格式就能確定下來了。
?獲取小說章節(jié)鏈接及標(biāo)題:
我們將執(zhí)行的結(jié)果網(wǎng)上拉就可看到每個(gè)章節(jié)的前面帶的有他的鏈接。
接下來我們要將其取出來,寫入以下代碼。第一次濾除其他數(shù)據(jù)
#找到HTML文檔中的所有<a>標(biāo)簽(即所有鏈接)
soup.links = soup.find_all('a')
#遍歷所有鏈接
# 獲取小說的章節(jié)鏈接
for a in soup.links:
print(a)
加入以上代碼后輸出,我們發(fā)現(xiàn)還有一些其他數(shù)據(jù)
我們通過修改遍歷代碼將其他的濾除掉.
## 獲取小說的章節(jié)鏈接
for a in soup.links:
if '.html' in str(a):
print(a)
通過判斷其中是否包含'.html'字符,來將其他濾除掉。
我們再次運(yùn)行。
?
我們發(fā)現(xiàn)其中還是有兩個(gè)我們不想要的數(shù)據(jù)。再次修改濾波代碼。?
濾除第一種的時(shí)候,我們只需要將章節(jié)這個(gè)也加入判斷即可,濾除第二種錯(cuò)誤數(shù)據(jù)我們就需要強(qiáng)行固定序列了,比如我們強(qiáng)行讓它從第一章開始。代碼如下:
# 獲取小說的章節(jié)鏈接
x=1
for a in soup.links:
if '.html' in str(a) and "第"+str(x)+"章" in str(a):
print(a)
x=x+1
再次運(yùn)行查看結(jié)果。
報(bào)錯(cuò)咯 ,因?yàn)槲覀冇昧酥形淖址?,這個(gè)是python 編碼文件問題。我們在第一行加一行代碼:
# coding: utf-8
再將文件改成utf-8的編碼格式即可。
首先找到工具->自定義
命令-》文件-》添加命令
文件-》高級保存選項(xiàng)-》確定
?關(guān)閉窗口:
?我們將文件保存為utf-8模式即可。
選擇編碼-》保存
再次運(yùn)行,我發(fā)現(xiàn)此時(shí)只有501章了,小說其實(shí)有1000多章呢
我們可以直接去章節(jié)目錄查看問題。原來是網(wǎng)站存在錯(cuò)別字。
我們只好再次修改我們將這個(gè)錯(cuò)誤也加入代碼中.
# 獲取小說的章節(jié)鏈接
x=1
for a in soup.links:
if '.html' in str(a) and ("第"+str(x)+"章" in str(a) or "弟"+str(x)+"章" in str(a)):
print(a)
x=x+1
再次運(yùn)行代碼??梢园l(fā)現(xiàn)代碼到可以到1000多章了。
?首先將鏈接從標(biāo)簽a中取出來。
# 獲取小說的章節(jié)鏈接
x=1
for a in soup.links:
if '.html' in str(a) and ("第"+str(x)+"章" in str(a) or "弟"+str(x)+"章" in str(a)):
print(str(a['href']))
x=x+1
運(yùn)行結(jié)果如下。
我會發(fā)現(xiàn)其中鏈接不全,我們直接通過這種形式肯定不行。我們查看網(wǎng)站網(wǎng)頁的命名格式。
我們每讀取一章就要如何通過這個(gè)網(wǎng)址來獲取,而不是上面那個(gè)地方的網(wǎng)頁。
我們需要將
/book/13713/18785770.html
轉(zhuǎn)化成下面這種模式?
https://www.biqubao2.com/book/13713/18785770.html
我們發(fā)現(xiàn)前面缺少的其實(shí)就是我們剛開始的鏈接,我們使用字符拼接即可。
修改后代碼如下所示。
# 獲取小說的章節(jié)鏈接
x=1
for a in soup.links:
if '.html' in str(a) and ("第"+str(x)+"章" in str(a) or "弟"+str(x)+"章" in str(a)):
tp=str(a['href'])
print(url[:-12]+tp)
x=x+1
運(yùn)行代碼結(jié)果:
最后修改代碼我們將鏈接和章節(jié)名稱保存起來。
# 獲取小說的章節(jié)鏈接
x=1
#鏈接
chapter_links=[]
#章節(jié)名稱
catalogue=[]
for a in soup.links:
if '.html' in str(a) and ("第"+str(x)+"章" in str(a) or "弟"+str(x)+"章" in str(a)):
tp=str(a['href'])
chapter_links.append(url[:-12]+tp)
catalogue.append(a.text)
x=x+1
print(chapter_links)
print(catalogue)
運(yùn)行后發(fā)現(xiàn)鏈接和我們的標(biāo)題都被保存下來了。
獲取小說并保存:
寫入以下代碼
# 初始化一個(gè)計(jì)數(shù)器,用于跟蹤章節(jié)的序號
i=0
# 對章節(jié)鏈接進(jìn)行遍歷
for link in chapter_links:
# 獲取每一章的內(nèi)容
chapter_response = requests.get(link)
# 設(shè)置響應(yīng)對象的編碼為utf-8,以正確處理獲取到的文本數(shù)據(jù)
chapter_response.encoding = 'utf-8'
# 使用BeautifulSoup庫解析獲取到的響應(yīng)文本,將其轉(zhuǎn)化為一個(gè)BeautifulSoup對象
# BeautifulSoup是一個(gè)用于解析HTML和XML文檔的Python庫
chapter_soup = BeautifulSoup(chapter_response.text, 'html.parser')
# 在BeautifulSoup對象中尋找id為"myDiv"的div標(biāo)簽
# 這通常用于定位網(wǎng)頁中的特定區(qū)域,以獲取其內(nèi)容
# 找到 id 為 "myDiv" 的 div 標(biāo)簽
div = chapter_soup.find('div', {'id': 'content'})
# 從找到的div標(biāo)簽中獲取文本內(nèi)容
chapter_text = div.get_text()
# 打開名為'novel.txt'的文件,以追加模式寫入數(shù)據(jù)
# 如果文件不存在,將創(chuàng)建一個(gè)新文件
# 將章節(jié)內(nèi)容寫入文件
with open('寒門極品公子.txt', 'a', encoding='utf-8') as f:
# 將catalogue[i]的內(nèi)容與一個(gè)換行符'\n'拼接,并寫入到文件中
# catalogue可能是一個(gè)列表或其他類型的可索引對象,它包含了各章節(jié)的標(biāo)題或其它標(biāo)識信息
f.write(catalogue[i] + '\n')
# 將獲取到的章節(jié)文本內(nèi)容與一個(gè)換行符'\n'拼接,并寫入到文件中
f.write(chapter_text + '\n')
# 打印出當(dāng)前處理的章節(jié)編號和狀態(tài)信息
print('第'+str(i)+'章下載完成')
time.sleep(5) # 延時(shí)5秒
# 當(dāng)所有章節(jié)都處理完畢后,打印出小說下載完成的信息
print('小說下載完成。')
代碼的主要內(nèi)容就是通過單個(gè)章節(jié)的鏈接獲取到回復(fù),之后找到居中格式的div ,獲取其中的文本就是先說內(nèi)容?這個(gè)時(shí)候我們將其寫入到txt中,知道完成下載,其中延時(shí)是必須的,防止影響網(wǎng)站運(yùn)行,從而導(dǎo)致踩縫紉機(jī)的風(fēng)險(xiǎn)。以下是運(yùn)行結(jié)果。
最后等待下載完成即可.
最后貼一下完整源碼。文章來源:http://www.zghlxwxcb.cn/news/detail-764773.html
# coding: utf-8
import time
import requests
from bs4 import BeautifulSoup
url='https://www.biqubao2.com/book/13713/'
# 請求的URL是'url',這里的'url'只是一個(gè)占位符,你需要把實(shí)際的URL替換進(jìn)去
response = requests.get(url)
# 設(shè)置響應(yīng)的編碼為'utf-8',這樣獲取到的文本內(nèi)容就會是'utf-8'編碼
response.encoding = 'utf-8'
# 用BeautifulSoup庫的'html.parser'解析器來解析從URL獲取到的HTML內(nèi)容
soup = BeautifulSoup(response.text, 'html.parser')
#找到HTML文檔中的所有<a>標(biāo)簽(即所有鏈接)
soup.links = soup.find_all('a')
# 獲取小說的章節(jié)鏈接
x=1
#鏈接
chapter_links=[]
#章節(jié)名稱
catalogue=[]
for a in soup.links:
if '.html' in str(a) and ("第"+str(x)+"章" in str(a) or "弟"+str(x)+"章" in str(a)):
tp=str(a['href'])
chapter_links.append(url[:-12]+tp)
catalogue.append(a.text)
x=x+1
i=0
for link in chapter_links:
# 獲取每一章的內(nèi)容
chapter_response = requests.get(link)
chapter_response.encoding = 'utf-8'
chapter_soup = BeautifulSoup(chapter_response.text, 'html.parser')
# 找到 id 為 "myDiv" 的 div 標(biāo)簽
div = chapter_soup.find('div', {'id': 'content'})
chapter_text = div.get_text()
# 將章節(jié)內(nèi)容寫入文件
with open('novel.txt', 'a', encoding='utf-8') as f:
f.write(catalogue[i] + '\n')
f.write(chapter_text + '\n')
i=i+1
print('第'+str(i)+'章下載完成')
time.sleep(5) # 延時(shí)5秒
print('小說下載完成。')
好了,不多說了,我的小說下載好了,我看小說去了。?文章來源地址http://www.zghlxwxcb.cn/news/detail-764773.html
到了這里,關(guān)于python:爬取網(wǎng)絡(luò)小說,看這一篇就夠了的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!