本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章天氣預報資料分析與統計之美 ,作者:?大頭雪糕?
Python GUI制作小說下載器教學講解
https://www.bilibili.com/video/BV13a4y1E7Tb/
前言
很多同學都喜歡看小說,尤其是程式員人群,對武俠小說,科幻小說都很著迷,最近的修仙的小說也很多,類似凡人修仙傳,武動乾坤,斗破蒼穹等等,今天分享一個用Python來爬取小說的小腳本!
目標
爬取一本仙俠類的小說下載并保存為txt檔案到本地,本例為“大周仙吏”,
專案準備
軟體:Pycharm
第三方庫:requests,fake_useragent,lxml
網站地址:https : //book.qidian.com
網站分析
網址:
網址轉化:https : //book.qidian.com/info/1020580616#Catalog
判斷是否為靜態加載網頁,Ctrl + U打開源代碼,Ctrl + F打開搜索框,輸入:第一章,
在這里是可以找到的,判定為靜態加載,
反爬分析
同一個IP地址去多次訪問會面臨被封掉的風險,這里采用fake_useragent,產生隨機的User-Agent請求頭進行訪問,
代碼實作
1.引入相對應的第三方庫,定義一個類類繼承物件,定義初始方法繼承自己,主函式main繼承自己,
import requests from fake_useragent import UserAgent from lxml import etree class photo_spider(object): def __init__(self): self.url = 'https://book.qidian.com/info/1020580616#Catalog' ua = UserAgent(verify_ssl=False) #隨機產生user-agent for i in range(1, 100): self.headers = { 'User-Agent': ua.random } def mian(self): pass if __name__ == '__main__': spider = qidian() spider.main()
2.發送請求,獲取網頁,
def get_html(self,url): response=requests.get(url,headers=self.headers) html=response.content.decode('utf-8') return html
3.獲取圖片的鏈接地址,
import requests from lxml import etree from fake_useragent import UserAgent class qidian(object): def __init__(self): self.url = 'https://book.qidian.com/info/1020580616#Catalog' ua = UserAgent(verify_ssl=False) for i in range(1, 100): self.headers = { 'User-Agent': ua.random } def get_html(self,url): response=requests.get(url,headers=self.headers) html=response.content.decode('utf-8') return html def parse_html(self,html): target=etree.HTML(html) links=target.xpath('//ul[@]/li/a/@href')#獲取鏈接 names=target.xpath('//ul[@]/li/a/text()')#獲取每一章的名字 for link,name in zip(links,names): print(name+'\t'+'https:'+link) def main(self): url=self.url html=self.get_html(url) self.parse_html(html) if __name__ == '__main__': spider=qidian() spider.main()
列印結果:
4.決議鏈接,獲取每一章內容,
def parse_html(self,html): target=etree.HTML(html) links=target.xpath('//ul[@]/li/a/@href') for link in links: host='https:'+link #決議鏈接地址 res=requests.get(host,headers=self.headers) c=res.content.decode('utf-8') target=etree.HTML(c) names=target.xpath('//span[@]/text()') results=target.xpath('//div[@]/p/text()') for name in names: print(name) for result in results: print(result)
列印結果:(以下內容過多,只貼出一部分,)
5.保存為txt檔案到本地,
with open('F:/pycharm檔案/document/' + name + '.txt', 'a') as f: for result in results: #print(result) f.write(result+'\n')
效果顯示:
檔案目錄:
完整代碼
import requests from lxml import etree from fake_useragent import UserAgent class qidian(object): def __init__(self): self.url = 'https://book.qidian.com/info/1020580616#Catalog' ua = UserAgent(verify_ssl=False) for i in range(1, 100): self.headers = { 'User-Agent': ua.random } def get_html(self,url): response=requests.get(url,headers=self.headers) html=response.content.decode('utf-8') return html def parse_html(self,html): target=etree.HTML(html) links=target.xpath('//ul[@]/li/a/@href') for link in links: host='https:'+link #決議鏈接地址 res=requests.get(host,headers=self.headers) c=res.content.decode('utf-8') target=etree.HTML(c) names=target.xpath('//span[@]/text()') results=target.xpath('//div[@]/p/text()') for name in names: print(name) with open('F:/pycharm檔案/document/' + name + '.txt', 'a') as f: for result in results: #print(result) f.write(result+'\n') def main(self): url=self.url html=self.get_html(url) self.parse_html(html) if __name__ == '__main__': spider=qidian() spider.main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/238341.html
標籤:Python
