Python爬取小說

2021-08-14 13:50:19 字數 3314 閱讀 4604

感覺這個夠蛋疼的,因為你如果正常寫的話,前幾次執行沒問題,之後你連**都沒改,再執行就出錯了。。。

其實這可能是網路請求失敗,或者有反爬蟲的東西吧。但這就會讓你寫的時候非常苦惱,所以這這東西,健壯性及其重要!

import requests

from bs4 import beautifulsoup

import os

import re

import random

# 獲取url的html內容

defgethtmltext

(url):

try:

# 偽裝為瀏覽器

kv =

r = requests.get(url, timeout=10, headers=kv)

r.raise_for_status() # 如果狀態不是200,引發httperror異常

return r.text

except:

return

"產生異常"

# 把字串filestr存到本地

deftxtdownload

(filestr, txtname):

root = "e://fiction//"

path = root + txtname + ".txt"

try:

# 如果沒有,建資料夾

ifnot os.path.exists(root):

os.mkdir(root)

# 無重名檔案

ifnot os.path.exists(path):

fh = open(path, 'w')

fh.write(filestr)

fh.close()

print("文字儲存成功")

else:

print("文字已存在")

except:

print("爬取失敗")

#分析每一章url中的內容,

defhtmlanalyse

(urllist, hp):

html = gethtmltext(hp + '/' + urllist.split('$')[0])

soup = beautifulsoup(html, "html.parser")

tmp = soup.find_all(id='content')

if tmp:

text = tmp[0]

else:

print("沒有爬取到真實內容")

return

filestr = ""

for string in text.strings:

tt = repr(string)

m = re.search(r'[\u4e00-\u9fa5]', tt)

if m:

#正規表示式處理內容

strinfo = re.compile('xa0|n|r')

st2 = strinfo.sub('', m.string)

strinfo2 = re.compile(r"\\|'")

st3 = strinfo2.sub('', st2)

filestr = filestr + st3 + '\n'

txtdownload(filestr, urllist.split('$')[1])

#主頁url,分析出每一章的url和內容,返回到list列表中 用$分隔url和name

defhomeanalyseurl

(hurl):

homehtml = gethtmltext(hurl)

hsoup = beautifulsoup(homehtml, "html.parser")

tmp = hsoup.find_all(id='list')

list =

if tmp:

text = tmp[0]

else:

print("**拒絕了我們訪問")

print(hsoup.prettify())

return list

alist = text.find_all('a')

for i in range(len(alist)):

s = str(alist[i].attrs['href'])

s = s.split('/')[-1]

print("主頁全部url分析完成")

return list

#優化版本,增加隨機爬取。增加引數,

defhomeanalyseurl2

(hurl, num):

homehtml = gethtmltext(hurl)

hsoup = beautifulsoup(homehtml, "html.parser")

tmp = hsoup.find_all(id='list')

list =

if tmp:

text = tmp[0]

else:

print("**拒絕了我們訪問:")

print(hsoup.prettify())

return list

alist = text.find_all('a')

allcha = range(len(alist))

rid = random.sample(allcha,num)

for i in range(num):

s = str(alist[rid[i]].attrs['href'])

s = s.split('/')[-1]

print("主頁全部url分析完成")

return list

if __name__ == "__main__":

#所以章節的url$name列表

# homepage = ""

# homepage = ""

# homepage = ""

#good

# homepage = ""

homepage = ""

#連續爬取

# urllist = homeanalyseurl(homepage)

#隨機爬取

spinum = 10

urllist = homeanalyseurl2(homepage, spinum)

if urllist:

for i in range(spinum):

print("第 " + str(i + 1) + " 次", end='')

htmlanalyse(urllist[i], homepage)

else:

print("我們被反爬蟲了")

python 爬取小說

前些天突然想看一些 可能是因為壓力大,所以就要有補償機制吧。為了節省流量,就想著把內容爬下來,然後就可以在路上看了。於是有了下面的指令碼。usr bin env python coding utf 8 import requests from lxml import etree 為了解決unicod...

python爬取小說

一 準備 安裝 requests pyquery庫 二 使用 定義了search類 初始化時傳入 第一章url 和 名即可 再呼叫all content方法即可 coding utf8 import re import requests from requests.exceptions import...

Python爬取小說

這裡主要爬取筆趣閣的鏈結 因為筆趣閣對段時間的爬取次數做了限制,所以每次我們只能爬取十章 coding utf 8 import re import soup as soup from bs4 import beautifulsoup import requests import chardet i...