用 Python 爬取起点小说网
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                用 Python 爬取起点小说网
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                目標(biāo)
爬取一本仙俠類的小說下載并保存為txt文件到本地。本例為“大周仙吏”。
項目準(zhǔn)備
軟件:Pycharm
第三方庫:requests,fake_useragent,lxml
網(wǎng)站地址:https://book.qidian.com
網(wǎng)站分析
打開網(wǎng)址:
網(wǎng)址變?yōu)?#xff1a;https://book.qidian.com/info/1020580616#Catalog
判斷是否為靜態(tài)加載網(wǎng)頁,Ctrl+U打開源代碼,Ctrl+F打開搜索框,輸入:第一章。
在這里是可以找到的,判定為靜態(tài)加載。
反爬分析
同一個ip地址去多次訪問會面臨被封掉的風(fēng)險,這里采用fake_useragent,產(chǎn)生隨機的User-Agent請求頭進(jìn)行訪問。
代碼實現(xiàn)
1.導(dǎo)入相對應(yīng)的第三方庫,定義一個class類繼承object,定義init方法繼承self,主函數(shù)main繼承self。
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)#隨機產(chǎn)生user-agentfor?i?in?range(1,?100):self.headers?=?{'User-Agent':?ua.random}def?mian(self):pass if?__name__?==?'__main__':spider?=?qidian()spider.main()2.發(fā)送請求,獲取網(wǎng)頁。
????def?get_html(self,url):response=requests.get(url,headers=self.headers)html=response.content.decode('utf-8')return?html3.獲取圖片的鏈接地址。
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?htmldef?parse_html(self,html):target=etree.HTML(html)links=target.xpath('//ul[@class="cf"]/li/a/@href')#獲取鏈接names=target.xpath('//ul[@class="cf"]/li/a/text()')#獲取每一章的名字for?link,name?in?zip(links,names):print(name+'\t'+'https:'+link)def?main(self):url=self.urlhtml=self.get_html(url)self.parse_html(html) if?__name__?==?'__main__':spider=qidian()spider.main()打印結(jié)果:
4.解析鏈接,獲取每一章內(nèi)容。
????def?parse_html(self,html):target=etree.HTML(html)links=target.xpath('//ul[@class="cf"]/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[@class="content-wrap"]/text()')results=target.xpath('//div[@class="read-content?j_readContent"]/p/text()')for?name?in?names:print(name)for?result?in?results:print(result)打印結(jié)果:(下面內(nèi)容過多,只貼出一部分。)
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?htmldef?parse_html(self,html):target=etree.HTML(html)links=target.xpath('//ul[@class="cf"]/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[@class="content-wrap"]/text()')results=target.xpath('//div[@class="read-content?j_readContent"]/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.urlhtml=self.get_html(url)self.parse_html(html) if?__name__?==?'__main__':spider=qidian()spider.main()更多閱讀
5 分鐘完全掌握 Python 協(xié)程
程序運行慢?你怕是寫的假 Python
賽博朋克科幻文化的起源和意義
特別推薦
程序員摸魚指南
為你精選的硅谷極客資訊,
來自FLAG巨頭開發(fā)者、技術(shù)、創(chuàng)投一手消息
點擊下方閱讀原文加入社區(qū)會員
總結(jié)
以上是生活随笔為你收集整理的用 Python 爬取起点小说网的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: echarts中的地图与Axure交互
- 下一篇: 通俗易通解释SLAM问题的数学描述:运动
