日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫之批量下载小说

發布時間:2023/12/16 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫之批量下载小说 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面練習了爬取單頁的小說內容,之后又練習了提取整部小說的內容:
可參考:
一部小說爬取

繼上次之后想試試批量爬取小說,想就接著干,找到目標網頁的地址:

頁面顯示如下:

然后打開開發者工具,發現內容也都在相應體中,那提取數據就十分簡單了,
頁面的跳轉的地址也很容易提取:

一段簡單的代碼實現跳轉頁面地址的提取,提取出來的地址少了協議,列表推導式完成地址的拼接:

跳轉之后竟然沒有直接到詳情頁,跳轉到了點擊閱讀的頁面:

沒辦法,只好再次提取中間跳轉的地址:

同樣也是很容易提取,地址也是不完整,列表推導式完成拼接:

請求之后終于到了列表詳情頁:

檢查之后提取內容也是很簡單,xpath直接提取,同時提取小說的名字,然后在請求小說內容頁面的地址:

文本頁面的內容同樣使用xpath提取,并提取章節,但有兩部小說的鏈接為空,所以就使用if判段直接跳過,否則接下來請求就會出錯,同時在這一步直接實現保存,代碼如下:


至此代碼完成,完整代碼如下:

''' 爬取17k小說網女生頻道完本50-100萬字的小說 ''' # 導入第三方庫 import os import requests from lxml import etree from fake_useragent import UserAgent# 隨機請求頭 ua = UserAgent()# 定義一個女生小說頻道的類 class Nover_Women():# 初始化對象def __init__(self):self.start_url = "https://www.17k.com/all/book/3_5_0_3_3_0_1_0_1.html"self.headers = {'User-Agent': ua.random}# 提取start_url的htmldef get_html(self, url):html = requests.get(url, headers=self.headers).content.decode()return html# 提取中間頁的地址def mid_page(self, html):e = etree.HTML(html)mid_link = e.xpath('//td[@class="td3"]/span/a/@href')mid_link = ["https:" + i for i in mid_link]return mid_link# 定義中間詳情頁的方法def mid_detail_page(self, mid_link):mid_list = []for link in mid_link:mid_data = {}mid_html = requests.get(url=link, headers=self.headers).content.decode()e = etree.HTML(mid_html)mid_detail_link = e.xpath('//dt[@class="read"]/a/@href')mid_detail_link = ["https://www.17k.com/" + i for i in mid_detail_link]mid_data["mid_detail_link"] = mid_detail_linkmid_list.append(mid_data)return mid_list# 定義最終詳情頁的方法def fin_detail(self, mid_list):for url in mid_list:content = {}r = requests.get(url=url["mid_detail_link"][0], headers=self.headers).content.decode()e = etree.HTML(r)content_page = e.xpath('//dl[@class="Volume"]/dd/a/@href')# 判段內容頁的返回值是否為空,如果為空則跳過if len(content_page) == 0:continue# 提取大標題book_name = e.xpath('//div[@class="Main List"]/h1/text()')content["name"] = book_name# 提取文本頁的地址content_page = ["https://www.17k.com" + i for i in content_page]content["link"] = content_page# 創建相應大標題的文件夾if not os.path.exists(content["name"][0]):os.mkdir(content["name"][0])# 遍歷循環請求內容頁的地址for content_url in content["link"]:content_html = requests.get(url=content_url, headers=self.headers).content.decode()e_content = etree.HTML(content_html)# 提取章節標題chapter = e_content.xpath('//div[@class="readAreaBox content"]/h1/text()')chapter = chapter[0].replace('\t', '')# 提取小說內容text = e_content.xpath('//div[@class="p"]/p/text()')with open(content["name"][0] + '/' + chapter + '.txt', 'w', encoding="utf-8") as f:print("正在寫入:" + content["name"][0] + ':' + chapter)f.write(chapter)f.write('\r\n')for i in text:f.write(i)# 定義運行函數,實現主要邏輯def run(self):url = self.start_urlhtml = self.get_html(url)mid_link = self.mid_page(html)mid_list = self.mid_detail_page(mid_link)self.fin_detail(mid_list)# 程序運行接口 if __name__ == '__main__':Novel_Spider = Nover_Women()Novel_Spider.run()

爬取結果如下:


爬取了很多,就不一一展示了。代碼僅作參考。

總結

以上是生活随笔為你收集整理的python爬虫之批量下载小说的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。