python爬蟲之小說網站--下載小說(正則表達式)
思路:
1.找到要下載的小說首頁,打開網頁源代碼進行分析(例:https://www.kanunu8.com/files/old/2011/2447.html)
2.分析自己要得到的內容,首先分析url,發現只有后面的是變化的,先獲得小說的沒有相對路徑,然后組合成新的url(每章小說的url)
3.獲得每章小說的內容,進行美化處理
代碼如下:
#小說爬蟲
import requests import re url='https://www.kanunu8.com/book4/10509/'
#因為編碼原因,先獲取二進制內容再進行解碼
txt=requests.get(url).content.decode('gbk') #當前小說編碼為"gbk2312"
m1=re.compile(r'<td colspan="4" align="center"><strong>(.+)</strong>') #print(m1.findall(txt))
m2=re.compile(r'<td( width="25%")?><a href="(.+\.html)">(.+)</a></td>') #print(m2.findall(txt))
raw=m2.findall(txt) #獲得小說的目錄以及對應的每個章節的相對路徑
sanguo=[] for i in raw: sanguo.append([i[2],url+i[1]]) #生成每個章節的url
#print(sanguo)
m3=re.compile(r'<p>(.+)</p>',re.S) #每章節小說內容
m4=re.compile(r'<br />') #<br />小說內容中的符號
m5=re.compile(r' ') with open('中國合伙人1.txt','a') as f: for i in sanguo: i_url=i[1] #i[1]為小說章節url
print("正在下載----->",i[0]) #i[0]為小說章節目錄
r_nr=requests.get(i_url).content.decode('gbk') n_nr=m3.findall(r_nr) #print(n_nr)
n=m4.sub('',n_nr[0]) #把n_nr[0]中"<br />"替換為空
n2=m5.sub('',n) f.write('\n'+i[0]+'\n') #把小說的目錄寫入文件
f.write(n2)
運行效果如下:
保存的內容如下: