不懂python使爬取小說觀看的方法?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。
python使爬取的小說更利于觀看的方法:
1、使用追加模式將文章寫入txt文本
關于文件的寫入, ‘w’ 的方式 是覆蓋寫, 沒有就創建, 那么我們寫小說就不需要用這個, 使用
‘a’ 追加寫的模式, 然后添加適當的分隔符, 只有文本中添加目錄, 整個txt在手機中才會顯示出目錄的存在 ,我的實例如下: 最好加點文字提示, 代表這章節下載成功到總txt中 !
path = 'D://爬取小說//'
os.chdir(path) # 進入這個文件夾
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讀取網頁的文章內容
爬取小說這樣的文字量很多的情況下, 文字的處理顯得極為重要了,爬取小說不推薦使用正則re,也不推薦使用soup, 原因你獲取不了網頁自帶的換行符和縮進符, 比如 \xboo 之類的, 如果你獲取不了文本自帶的這些,那么你就得自己添加,可以使用re的sub進行適當的替換換行,這就很麻煩,這里一定推薦使用xpath的text() 去匹配, 方便快捷,爬小說的小助手!
text = html.xpath('//div[@id="content"]/text()')3、添加sleep函數,降低爬取速度
為什么會出現這樣的情況,高頻發的請求網址,如果不是使用框架, 那么就需要設置延遲時間了。比如sleep() 或者 request 加入參數 timeout ,不然很容易被網址通過請求次數 進而識別出來 這是一個爬蟲程序, 也就是非人類操作, 那么他就可以不讓你請求,從而你就爬蟲失??!
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):
"""
獲得每一章節的網址
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):
"""
根據章節下載'
"""
path = 'D://爬取小說//'
os.chdir(path) # 進入這個文件夾
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):
"""
分析每一章節 然后下載, 次數過快 容易炸ip 三次保底請求 !
"""
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}未下載成功! 再次請求')
rr = requests.get(url, headers=self.headers)
if rr.status_code == 200:
self.parse_page_error(rr)
else:
print("第三次請求!")
rrr = requests.get(url, headers=self.headers)
self.parse_page_error(rrr)
print('全部下載完成!')
jiushen = Spider()
jiushen.parse_page()感謝你能夠認真閱讀完這篇文章,希望小編分享python使爬取小說觀看的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。