目標:每一個小說保存成一個txt文件
思路:獲取每個小說地址(圖一),進入后獲取每章節地址(圖二),然后進入獲取該章節內容(圖三)保存文件中。循環
效果圖:
每一行都有注釋,不多解釋了
import requests
from bs4 import BeautifulSoup
import os
if __name__ == '__main__':
# 要下載的網頁
url = 'https://www.biqubao.com/quanben/'
# 網站根網址
root_url = 'https://www.biqubao.com'
# 保存本地路徑
path = 'F:\\python\\txt'
# 解析網址
req = requests.get(url)
# 設置編碼,瀏覽器查看網站編碼:F12,控制開輸入document.characterSet回車即可查看
req.encoding = 'gbk'
# 獲取網頁所有內容
soup = BeautifulSoup(req.text, 'html.parser')
# 查找網頁中div的id為main的標簽
list_tag = soup.div(id="main")
# 查看div內所有里標簽
li = list_tag[0](['li'])
# 刪除第一個沒用的標簽
del li[0]
# 循環遍歷
for i in li:
# 獲取到a標簽間的內容---小說類型
txt_type = i.a.string
# 獲取a標簽的href地址值---小說網址
short_url = (i(['a'])[1].get('href'))
# 獲取第三個span標簽的值---作者
author = i(['span'])[3].string
# 獲取網頁設置網頁編碼
req = requests.get(root_url + short_url)
req.encoding = 'gbk'
# 解析網頁
soup = BeautifulSoup(req.text, "html.parser")
list_tag = soup.div(id="list")
# 獲取小說名
name = list_tag[0].dl.dt.string
print("類型:{} 短址:{} 作者:{} 小說名:{}".format(txt_type, short_url, author, name))
# 創建同名文件夾
# paths = path + '\\' + name
if not os.path.exists(path):
# 獲取當前目錄並組合新目錄
# os.path.join(path, name)
os.mkdir(path)
# 循環所有的dd標簽
for dd_tag in list_tag[0].dl.find_all('dd'):
# 章節名
zjName = dd_tag.string
# 章節地址
zjUrl = root_url + dd_tag.a.get('href')
# 訪問網址爬取章節內容
req2 = requests.get(zjUrl)
req2.encoding = 'gbk'
zj_soup = BeautifulSoup(req2.text, "html.parser")
content_tag = zj_soup.div.find(id="content")
# 把空格內容替換成換行
text = str(content_tag.text.replace('\xa0', '\n'))
text.replace('\ufffd', '\n')
# 寫入文件操作'a'追加
with open(path + "\\" + name + ".txt", 'a') as f:
f.write('\n' + '\n' + zjName)
f.write(text)
print("{}------->寫入完畢".format(zjName))