您好,登錄后才能下訂單哦!
不懂python使爬取小說(shuō)觀看的方法?其實(shí)想解決這個(gè)問(wèn)題也不難,下面讓小編帶著大家一起學(xué)習(xí)怎么去解決,希望大家閱讀完這篇文章后大所收獲。
python使爬取的小說(shuō)更利于觀看的方法:
1、使用追加模式將文章寫(xiě)入txt文本
關(guān)于文件的寫(xiě)入, ‘w’ 的方式 是覆蓋寫(xiě), 沒(méi)有就創(chuàng)建, 那么我們寫(xiě)小說(shuō)就不需要用這個(gè), 使用
‘a(chǎn)’ 追加寫(xiě)的模式, 然后添加適當(dāng)?shù)姆指舴?只有文本中添加目錄, 整個(gè)txt在手機(jī)中才會(huì)顯示出目錄的存在 ,我的實(shí)例如下: 最好加點(diǎn)文字提示, 代表這章節(jié)下載成功到總txt中 !
path = 'D://爬取小說(shuō)//' os.chdir(path) # 進(jìn)入這個(gè)文件夾 with open('酒神.txt', 'a+', encoding='utf-8') as fw: fw.write(''.join(items['title']) + '\n\n\n' + '- ' * 40) fw.write(''.join(items['text'])) print(f'{items["title"]} 下載完成!')
2、使用xpath讀取網(wǎng)頁(yè)的文章內(nèi)容
爬取小說(shuō)這樣的文字量很多的情況下, 文字的處理顯得極為重要了,爬取小說(shuō)不推薦使用正則re,也不推薦使用soup, 原因你獲取不了網(wǎng)頁(yè)自帶的換行符和縮進(jìn)符, 比如 \xboo 之類(lèi)的, 如果你獲取不了文本自帶的這些,那么你就得自己添加,可以使用re的sub進(jìn)行適當(dāng)?shù)奶鎿Q換行,這就很麻煩,這里一定推薦使用xpath的text() 去匹配, 方便快捷,爬小說(shuō)的小助手!
text = html.xpath('//div[@id="content"]/text()')
3、添加sleep函數(shù),降低爬取速度
為什么會(huì)出現(xiàn)這樣的情況,高頻發(fā)的請(qǐng)求網(wǎng)址,如果不是使用框架, 那么就需要設(shè)置延遲時(shí)間了。比如sleep() 或者 request 加入?yún)?shù) timeout ,不然很容易被網(wǎng)址通過(guò)請(qǐng)求次數(shù) 進(jìn)而識(shí)別出來(lái) 這是一個(gè)爬蟲(chóng)程序, 也就是非人類(lèi)操作, 那么他就可以不讓你請(qǐng)求,從而你就爬蟲(chóng)失敗!
r = requests.get(url, headers=self.headers) time.sleep(0.7)
完整代碼如下:
# -*- coding : utf-8 -*- # @Time : 2020/6/2 16:13 # @author : 沙漏在下雨 # @Software : PyCharm # @CSDN : https://me.csdn.net/qq_45906219 import requests from lxml import etree import os import time class Spider: def __init__(self): self.start_url = 'http://www.biquge.info/11_11079/' self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/81.0.4044.129 Safari/537.36', 'Host': 'www.biquge.info', 'Referer': 'http://www.biquge.info/11_11079/5216668.html', 'Cookie': 'clickbids=11079; Hm_lvt_6dfe3c8f195b43b8e667a2a2e5936122=1591085546;' ' Hm_lvt_c979821d0eeb958aa7201d31a6991f34=1591085539,1591085553,1591085815; ' 'Hm_lpvt_6dfe3c8f195b43b8e667a2a2e5936122=1591087376; ' 'Hm_lpvt_c979821d0eeb958aa7201d31a6991f34=1591087377'} def get_page(self): """ 獲得每一章節(jié)的網(wǎng)址 yield 回去 """ r = requests.get(self.start_url, headers=self.headers) if r.status_code == 200: r.encoding = r.apparent_encoding html = etree.HTML(r.text) page_url = html.xpath('//div[@id="list"]/dl/dd/a/@href') for url in page_url[222:]: url = f'http://www.biquge.info/11_11079/{url}' yield url def save_text(self, items): """ 根據(jù)章節(jié)下載' """ path = 'D://爬取小說(shuō)//' os.chdir(path) # 進(jìn)入這個(gè)文件夾 with open('酒神.txt', 'a+', encoding='utf-8') as fw: fw.write(''.join(items['title']) + '\n\n\n' + '- ' * 40) fw.write(''.join(items['text'])) print(f'{items["title"]} 下載完成!') def parse_page_error(self, r): # 為處理異常: r.encoding = r.apparent_encoding html = etree.HTML(r.text) title = html.xpath('//div[@class="bookname"]/h2/text()') text = html.xpath('//div[@id="content"]/text()') items = {} items['title'] = title items['text'] = text self.save_text(items) def parse_page(self): """ 分析每一章節(jié) 然后下載, 次數(shù)過(guò)快 容易炸ip 三次保底請(qǐng)求 ! """ for url in self.get_page(): r = requests.get(url, headers=self.headers) time.sleep(0.7) if r.status_code == 200: self.parse_page_error(r) else: print(f'該 {url}未下載成功! 再次請(qǐng)求') rr = requests.get(url, headers=self.headers) if rr.status_code == 200: self.parse_page_error(rr) else: print("第三次請(qǐng)求!") rrr = requests.get(url, headers=self.headers) self.parse_page_error(rrr) print('全部下載完成!') jiushen = Spider() jiushen.parse_page()
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python使爬取小說(shuō)觀看的方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。