Python爬取365好書中小說(shuō)代碼實(shí)例
需要轉(zhuǎn)載的小伙伴轉(zhuǎn)載后請(qǐng)注明轉(zhuǎn)載的地址
需要用到的庫(kù)
- from bs4 import BeautifulSoup
- import requests
- import time
365好書鏈接:http://www.365haoshu.com/ 爬取《我以月夜寄相思》小說(shuō)
首頁(yè)進(jìn)入到目錄:http://www.365haoshu.com/Book/Chapter/List.aspx?NovelId=3026
獲取小說(shuō)的每個(gè)章節(jié)的名稱和章節(jié)鏈接
打開(kāi)瀏覽器的開(kāi)發(fā)者工具,查找一個(gè)章節(jié):如下圖,找到第一章的名稱和href(也就是第一章節(jié)內(nèi)容頁(yè)面的鏈接),開(kāi)始寫代碼

from bs4 import BeautifulSoup
import requests
import time
# 分別導(dǎo)入time、requests、BeautifulSoup庫(kù)
url = 'http://www.365haoshu.com/Book/Chapter/'
# 鏈接地址url,這兒url章節(jié)鏈接沒(méi)全寫出來(lái)是因?yàn)橄旅娅@取章節(jié)鏈接時(shí)要用到這些url
req = requests.get(url+'List.aspx?NovelId=0326')
# 打開(kāi)章節(jié)頁(yè)面,
req_bf = BeautifulSoup(req.text,"html.parser")
print(req_bf)
# 將打開(kāi)的頁(yè)面以text打印出來(lái)
div = req_bf.find_all('div',class_='user-catalog-ul-li')
# 分析頁(yè)面,所需要的章節(jié)名和章節(jié)鏈接是在div標(biāo)簽,屬性class為user-catalog-ul-li下
# 找到這個(gè)下的內(nèi)容,并打印
s = []
for d in div:
s.append(d.find('a'))
print(s)
# 獲取div下面的a標(biāo)簽下的內(nèi)容
names=[] # 存儲(chǔ)章節(jié)名
hrefs=[] # 存儲(chǔ)章節(jié)鏈接
for i in s:
names.append(i.find('span').string)
hrefs.append(url + i.get('href'))
# 將所有的章節(jié)和章節(jié)鏈接存入的列表中
觀察href后的鏈接和打開(kāi)章節(jié)內(nèi)容頁(yè)面的鏈接是不完全的相同的, 所以要拼接使得瀏覽器能直接打開(kāi)章節(jié)內(nèi)容
獲取到鏈接和章節(jié)名后打開(kāi)一個(gè)章節(jié)獲取文本內(nèi)容;
和獲取章節(jié)名方法一致,一步一步查找到內(nèi)容的位置
txt = requests.get(hrefs[0])
div_bf = BeautifulSoup(txt.text,'html.parser')
div = div_bf.find_all('div',class_='container user-reading-online pos-rel')
#print(div)
ps = BeautifulSoup(str(div),"html.parser")
p=ps.find_all('p',class_='p-content')
print(p)
txt=[]
for i in p:
txt.append(i.string+'\n')
print(txt)
獲取單一章節(jié)完成
接下來(lái)整理代碼,獲取整個(gè)小說(shuō)的內(nèi)容,代碼如下:
# --*-- coding=utf-8 --*--
from bs4 import BeautifulSoup
import requests
import time
class spiderstory(object):
def __init__(self): # 初始化
self.url = 'http://www.365haoshu.com/Book/Chapter/'
self.names = [] # 存放章節(jié)名
self.hrefs = [] # 存放章節(jié)鏈接
def get_urlAndName(self):
'''獲取章節(jié)名和章節(jié)鏈接'''
req = requests.get(url=self.url+'List.aspx?NovelId=0326') # 獲取章節(jié)目錄頁(yè)面
time.sleep(1) # 等待1秒
div_bf = BeautifulSoup(req.text,"html.parser") # req后面跟text和html都行
div = div_bf.find_all('div', class_='user-catalog-ul-li') # 查找內(nèi)容,標(biāo)簽為div,屬性為class='user-catalog-ul-li'
a_bf = BeautifulSoup(str(div))
a = a_bf.find_all('a') # # 查找內(nèi)容,標(biāo)簽為a
for i in a:
self.names.append(i.find('span').string) # 獲取內(nèi)容直接string就行
self.hrefs.append(self.url + i.get('href')) # 獲取鏈接
def get_text(self,url):
'''獲取章節(jié)內(nèi)容'''
req = requests.get(url=url)
div_bf = BeautifulSoup(req.text,"html.parser")
div = div_bf.find_all('div', class_='container user-reading-online pos-rel') # 查找內(nèi)容
ps = BeautifulSoup(str(div), "html.parser")
p = ps.find_all('p', class_='p-content')
text = []
for each in p:
text.append(each.string)
print(text)
return text # 將獲得的內(nèi)容返回
def writer(self, name, path, text):
'''寫入text文檔中'''
with open(path, 'a', encoding='utf-8') as f:
f.write(name + '\n')
f.writelines(text)
f.write('\n\n')
if __name__ == "__main__": # 運(yùn)行入口
s = spiderstory()
s.get_urlAndName()
le = len(s.names)
for i in range(le): # 利用for循環(huán)獲得所有的內(nèi)容
name = s.names[i]
text = str(s.get_text(s.hrefs[i]))
s.writer(name,"我以月夜寄相思.txt",text)
print('下載完畢?。。?)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基python實(shí)現(xiàn)多線程網(wǎng)頁(yè)爬蟲(chóng)
python是支持多線程的, 主要是通過(guò)thread和threading這兩個(gè)模塊來(lái)實(shí)現(xiàn)的,本文主要給大家分享python實(shí)現(xiàn)多線程網(wǎng)頁(yè)爬蟲(chóng),需要的朋友可以參考下2015-09-09
python單例模式的應(yīng)用場(chǎng)景實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于python單例模式的應(yīng)用場(chǎng)景實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-02-02
conda下載各種包時(shí)如何避免版本不匹配問(wèn)題
在使用python和conda時(shí),由于Python版本不匹配,可能會(huì)導(dǎo)致一些問(wèn)題的出現(xiàn),本文主要介紹了conda下載各種包時(shí)如何避免版本不匹配問(wèn)題,感興趣的可以了解一下2024-03-03
TensorFlow實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)的示例代碼
?TensorFlow數(shù)據(jù)增強(qiáng)?是一種通過(guò)變換和擴(kuò)充訓(xùn)練數(shù)據(jù)的方法,本文主要介紹了TensorFlow實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解游戲2024-08-08
Tensorflow之MNIST CNN實(shí)現(xiàn)并保存、加載模型
這篇文章主要為大家詳細(xì)介紹了Tensorflow之MNIST CNN實(shí)現(xiàn)并保存、加載模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Python自動(dòng)化辦公之清理重復(fù)文件詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python清理重復(fù)的文件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-05-05

