Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》
生活随笔
收集整理的這篇文章主要介紹了
Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Crawler:利用Beautifulsoup庫+find_all方法實(shí)現(xiàn)下載在線書架小說《星祖的電影世界》
?
?
目錄
輸出結(jié)果
核心代碼
?
?
?
?
輸出結(jié)果
?
核心代碼
?
# -*- coding: utf-8 -*- ''' Created on 2018年4月7日@author: niu ''' #Py之Crawler:利用beautifulsoup+find_all方法實(shí)現(xiàn)下載在線書架小說《星祖的電影世界》 #find_all方法的第一個(gè)參數(shù)是獲取的標(biāo)簽名,第二個(gè)參數(shù)class_是標(biāo)簽的屬性。from bs4 import BeautifulSoup import requests, sysclass downloader(object):def __init__(self):self.server = 'http://www.biqukan.com/'self.target = 'http://www.biqukan.com/50_50927/'self.names = [] #存放章節(jié)名self.urls = [] #存放章節(jié)鏈接self.nums = 0 #章節(jié)數(shù)def get_download_url(self): #獲取下載鏈接req = requests.get(url = self.target)html = req.textdiv_bf = BeautifulSoup(html) #利用beautifulsoup提取內(nèi)容div = div_bf.find_all('div', class_ = 'listmain') #通過審查元素發(fā)現(xiàn)全書各個(gè)章節(jié)存放在了class屬性為listmain的div標(biāo)簽下,各章之間差別就在于這些章節(jié)的【href】屬性不一樣,而且其屬性正好對應(yīng)著每一章節(jié)URL后半部分,那這樣,我們就可以根據(jù)標(biāo)簽的href屬性值獲得每個(gè)章節(jié)的鏈接和名稱了。a_bf = BeautifulSoup(str(div[0]))a = a_bf.find_all('a') self.nums = len(a[14:]) #剔除不必要的章節(jié),并統(tǒng)計(jì)章節(jié)數(shù)for each in a[14:]:self.names.append(each.string)self.urls.append(self.server + each.get('href')) #再接著提取章節(jié)名和章節(jié)文章def get_contents(self, target): #獲取章節(jié)內(nèi)容,target下載連接(string),texts章節(jié)內(nèi)容(string)req = requests.get(url = target)html = req.textbf = BeautifulSoup(html)texts = bf.find_all('div', class_ = 'showtxt') #觀察不同標(biāo)簽發(fā)現(xiàn)class屬性為showtxt的div標(biāo)簽只有一個(gè)!這個(gè)標(biāo)簽里面存放的內(nèi)容,是我們需要的小說正文texts = texts[0].text.replace('\xa0'*8,'\n\n') #replace方法,剔除空格,替換為回車進(jìn)行分段。 在html中是用來表示空格的。replace(‘\xa0’*8,’\n\n’)就是去掉下圖的八個(gè)空格符號(hào),并用回車代替return textsdef writer(self, name, path, text): #將爬取的文章內(nèi)容寫入文件write_flag = Truewith open(path, 'a', encoding='utf-8') as f: #當(dāng)前路徑下,小說保存名稱(string)f.write(name + '\n') #章節(jié)名稱(string)f.writelines(text) #章節(jié)內(nèi)容(string)f.write('\n\n') if __name__ == "__main__":dl = downloader()dl.get_download_url()print('《星祖的電影世界》開始下載:')for i in range(dl.nums):dl.writer(dl.names[i], '星祖的電影世界.txt', dl.get_contents(dl.urls[i]))sys.stdout.write(" 已下載:%.3f%%" % float(i/dl.nums) + '\r')sys.stdout.flush()print('《星祖的電影世界》下載完成')?
?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BlockChain:Python一步一
- 下一篇: Py之demjson:Python库之d