小说有广告?我用50行Python爬虫做了一个无广在线小说阅读器
小說有廣告?我用50行Python爬蟲做了一個無廣在線小說閱讀器
- 前言
- 介紹
- 正文
- 預配置
- 搜索
- 獲取章節列表
- 在線閱讀
- 總結
前言
還在為看小說受到廣告影響而煩惱嗎?不如利用起時間,跟著本文一起入門python爬蟲,實現小說自由!
介紹
本項目的全部內容包括:
1.搜索功能實現
2.根據所選小說爬取全部章節列表
3.在線閱讀所選章節
正文
預配置
在一般的無反爬蟲情形下,python請求網頁信息的請求頭較為簡單,只寫User-Agent項即可,可在檢查中任意請求的請求頭中查看
配置代碼如下:
上段代碼中使用了session會話機制,可有效提升python的requests訪問網站速度
搜索
在小說網站搜索萬相之王,檢查網絡元素
發現其請求的url如上圖中所示,其中的searchkey即為搜索文字的url編碼
分析網頁源碼可知,我們所需的書名和鏈接均位于class屬性值為grid的table標簽中,使用xpath語法即可提取標簽內容和標簽屬性
綜上,這一部分輸入書名搜索返回結果的代碼如下:
獲取章節列表
打開任意一本書籍,檢查加載書籍章節時的網絡訪問情況
可以發現請求的地址就是我們上一步中得到的書籍url,進一步證實了想法
在這里我們發現所有章節名稱和url信息全部位于網頁源碼的dd標簽中,同上,利用xpath語法提取
這一部分獲取章節名字的代碼如下:
在線閱讀
我們打開任意一章小說,審查網絡元素
同樣可以發現所請求的網站就是上一步中得到的章節地址
在網頁源碼中我們發現小說正文部分位于id屬性為content的div標簽中,編寫代碼提取正文內容:
到此,我們已經掌握了整個小說閱讀的來龍去脈
總結
整個網絡小說在線閱讀類封裝如下:
import requests from lxml import etreeclass bqCrawler():def __init__(self):self._headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.55"}self._search_url = 'https://www.xbiquwx.la/modules/article/search.php?searchkey='self._book_url = 'https://www.xbiquwx.la'self.session = requests.session()def search(self, name:str):if name:response = self.session.get(url = self._search_url + name, headers = self._headers)html = etree.HTML(response.content.decode())self.bookID = html.xpath('//table[@class="grid"]/tr/td[@class="odd"]/a/@href')bookNameTag = html.xpath('//table[@class="grid"]/tr/td[@class="odd"]/a')self.bookName = [item.text for item in bookNameTag]return self.bookNamedef chapLists(self, index:int):response = self.session.get(url = self._book_url + self.bookID[index], headers = self._headers)self.index = indexhtml = etree.HTML(response.content.decode())self.chapUrls = html.xpath('//div[@class="box_con"]/div[@id="list"]//a/@href')self.chapTitles = html.xpath('//div[@class="box_con"]/div[@id="list"]//a/@title')self.chapUrls.reverse()self.chapTitles.reverse()return self.chapTitlesdef read(self, index:int):response = self.session.get(url = self._book_url + self.bookID[self.index] + self.chapUrls[index], headers = self._headers)code = response.apparent_encodinghtml = etree.HTML(response.content.decode())articleRaw = html.xpath('//div[@class="content_read"]//div[@id="content"]')a0 = etree.tostring(articleRaw[0],encoding=code).decode(code)a2 = a0[32:-29]article = "<h1>"+self.chapTitles[index]+"</h1>"+'<font size="5"><br />'+a2+"</font>"return article在此基礎上我們稍作修飾,用PyQt5為其開發一個可視化面板,最終效果如圖:
總結
以上是生活随笔為你收集整理的小说有广告?我用50行Python爬虫做了一个无广在线小说阅读器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 类型转换方法_java数据类型
- 下一篇: pythonif语句的多分支使用_Pyt