电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python 爬取國內小說網站

瀏覽:12日期:2022-06-17 11:08:47
目錄原理先行實踐篇完整代碼原理先行

作為一個資深的小說愛好者,國內很多小說網站如出一轍,什么 🖊*閣啊等等,大都是 get 請求返回 html 內容,而且會有標志性的<dl><dd>等標簽。所以大概的原理,就是先 get 請求這個網站,然后對獲取的內容進行清洗,寫進文本里面,變成一個 txt,導入手機,方便看小說。

實踐篇

之前踩過一個坑,一開始我看了幾頁小說,大概小說的內容網站是https://www.xxx.com/小說編號/章節編號.html,一開始看前幾章,我發現章節編號是連續的, 于是我一開始想的就是記住起始章節編號,然后在循環的時候章節編號自增就行,后面發現草率了,可能看個 100 章之后,章節列表會出現斷層現象,這個具體為啥 還真不知道,按理說小說編號固定,可以算是一個數據表,那里面的章節編號不就是一個自增 id 就完了嘛?有懂王可以科普一下!所以這里要先獲取小說的目錄列表,并把目錄列表洗成一個數組方便我們后期查找!getList.py文件:

定義一個請求書簽的方法

# 請求書簽地址def req(): url = 'https://www.24kwx.com/book/4/4020/' strHtml = requests.get(url) return strHtml.text

將獲取到的內容提取出(id:唯一值/或第 X 章小說)(name:小說的章節名稱)(key:小說的章節 id)

# 定義一個章節對象class Xs(object): def __init__(self,id,key,name):self._id = idself._key = keyself._name = name @property def id(self):self._id @property def key(self):self._key @property def name(self):self._name def getString(self):return ’id:%s,name:%s,key:%s’ %(self._id,self._name,self._key)# 轉換成書列表def tranceList(): key = 0 name = '' xsList = [] idrule = r’/4020/(.+?).html’ keyrule = r’第(.+?)章’ html = req() html = re.split('</dt>',html)[2] html = re.split('</dl>',html)[0] htmlList = re.split('</dd>',html) for i in htmlList:i = i.strip()if(i): # 獲取id id = re.findall(idrule,i)[0] lsKeyList = re.findall(keyrule,i) # 如果有章節 if len(lsKeyList) > 0 :key = int(lsKeyList[0])lsname = re.findall(r’章(.+?)</a>’,i) else :key = key + 1 # 獲取名字 # lsname = re.findall(r’.html'>(.+?)</a>’,i)[0] # name = re.sub(’,’,’ ’, lsname, flags=re.IGNORECASE) name = re.findall(r’.html'>(.+?)</a>’,i)[0] xsobj = Xs(id,key,name) xsList.append(xsobj.getString()) writeList(xsList)

注意一下我:如果你從別的語言轉 py,第一次寫object對象可能會比較懵,沒錯因為他的object是一個class,這里我創建的對象就是{id,key,name}但是你寫入 txt 的時候還是要getString,所以后面想想我直接寫個{id:xxx,name:xxx,key:xxx}的字符串不就完了,還弄啥class,后面還是想想給兄弟盟留點看點,就留著了

最后寫入 txt 文件

# 寫入到文本def writeList(list): f = open('xsList.txt',’w’,encoding=’utf-8’) # 這里不能寫list,要先轉字符串 TypeError: write() argument must be str, not list f.write(’n’.join(list)) print(’寫入成功’)# 大概寫完的txt是這樣的id:3798160,name:第1章 孫子,我是你爺爺,key:1id:3798161,name:第2章 孫子,等等我!,key:2id:3798162,name:第3章 天上掉下個親爺爺,key:3id:3798163,name:第4章 超級大客戶,key:4id:3798164,name:第5章 一張退婚證明,key:5

ok ! Last one這里已經寫好了小說的目錄,那我們就要讀取小說的內容,同理

先寫個請求

# 請求內容地址def req(id): url = 'https://www.24kwx.com/book/4/4020/'+id+'.html' strHtml = requests.get(url) return strHtml.text

讀取我們剛剛保存的目錄

def getList(): f = open('xsList.txt',’r’, encoding=’utf-8’) # 這里按行讀取,讀取完后line是個數組 line = f.readlines() f.close() return line

定義好一個清洗數據的規則

contextRule = r’<div class='content'>(.+?)<script>downByJs();</script>’titleRule = r’<h1>(.+?)</h1>’def getcontext(objstr): xsobj = re.split(',',objstr) id = re.split('id:',xsobj[0])[1] name = re.split('name:',xsobj[1])[1] html = req(id) lstitle = re.findall(titleRule,html) title = lstitle[0] if len(lstitle) > 0 else name context = re.split(’<div class='showtxt'>’,html)[1] context = re.split(’</div>’,context)[0] context = re.sub(’&nbsp;|r|n’,’’,context) textList = re.split(’<br />’,context) textList.insert(0,title) for item in textList :writeTxt(item) print(’%s--寫入成功’%(title))

再寫入文件

def writeTxt(txt): if txt :f = open('nr.txt',’a’,encoding='utf-8')f.write(txt+’n’)

最后當然是串聯起來啦

def getTxt(): # 默認參數配置 startNum = 1261 # 起始章節 endNum = 1300 # 結束章節 # 開始主程序 f = open('nr.txt',’w’,encoding=’utf-8’) f.write('') if endNum < startNum:print(’結束條數必須大于開始條數’)return allList = getList() needList = allList[startNum-1:endNum] for item in needList:getcontext(item)time.sleep(0.2) print('全部爬取完成')完整代碼

getList.py

import requestsimport re# 請求書簽地址def req(): url = 'https://www.24kwx.com/book/4/4020/' strHtml = requests.get(url) return strHtml.text# 定義一個章節對象class Xs(object): def __init__(self,id,key,name):self._id = idself._key = keyself._name = name @property def id(self):self._id @property def key(self):self._key @property def name(self):self._name def getString(self):return ’id:%s,name:%s,key:%s’ %(self._id,self._name,self._key)# 轉換成書列表def tranceList(): key = 0 name = '' xsList = [] idrule = r’/4020/(.+?).html’ keyrule = r’第(.+?)章’ html = req() html = re.split('</dt>',html)[2] html = re.split('</dl>',html)[0] htmlList = re.split('</dd>',html) for i in htmlList:i = i.strip()if(i): # 獲取id id = re.findall(idrule,i)[0] lsKeyList = re.findall(keyrule,i) # 如果有章節 if len(lsKeyList) > 0 :key = int(lsKeyList[0])lsname = re.findall(r’章(.+?)</a>’,i) else :key = key + 1 # 獲取名字 # lsname = re.findall(r’.html'>(.+?)</a>’,i)[0] # name = re.sub(’,’,’ ’, lsname, flags=re.IGNORECASE) name = re.findall(r’.html'>(.+?)</a>’,i)[0] xsobj = Xs(id,key,name) xsList.append(xsobj.getString()) writeList(xsList)# 寫入到文本def writeList(list): f = open('xsList.txt',’w’,encoding=’utf-8’) # 這里不能寫list,要先轉字符串 TypeError: write() argument must be str, not list f.write(’n’.join(list)) print(’寫入成功’)def main(): tranceList()if __name__ == ’__main__’: main()

writeTxt.py

import requestsimport reimport time# 請求內容地址def req(id): url = 'https://www.24kwx.com/book/4/4020/'+id+'.html' strHtml = requests.get(url) return strHtml.textdef getList(): f = open('xsList.txt',’r’, encoding=’utf-8’) # 這里按行讀取 line = f.readlines() f.close() return linecontextRule = r’<div class='content'>(.+?)<script>downByJs();</script>’titleRule = r’<h1>(.+?)</h1>’def getcontext(objstr): xsobj = re.split(',',objstr) id = re.split('id:',xsobj[0])[1] name = re.split('name:',xsobj[1])[1] html = req(id) lstitle = re.findall(titleRule,html) title = lstitle[0] if len(lstitle) > 0 else name context = re.split(’<div class='showtxt'>’,html)[1] context = re.split(’</div>’,context)[0] context = re.sub(’&nbsp;|r|n’,’’,context) textList = re.split(’<br />’,context) textList.insert(0,title) for item in textList :writeTxt(item) print(’%s--寫入成功’%(title))def writeTxt(txt): if txt :f = open('nr.txt',’a’,encoding='utf-8')f.write(txt+’n’)def getTxt(): # 默認參數配置 startNum = 1261 # 起始章節 endNum = 1300 # 結束章節 # 開始主程序 f = open('nr.txt',’w’,encoding=’utf-8’) f.write('') if endNum < startNum:print(’結束條數必須大于開始條數’)return allList = getList() needList = allList[startNum-1:endNum] for item in needList:getcontext(item)time.sleep(0.2) print('全部爬取完成') def main(): getTxt()if __name__ == '__main__': main()

以上就是python 爬取國內小說網站的詳細內容,更多關于python 爬取小說網站的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 煤粉取样器-射油器-便携式等速飞灰取样器-连灵动 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 灌装封尾机_胶水灌装机_软管灌装封尾机_无锡和博自动化机械制造有限公司 | 海峰资讯 - 专注装饰公司营销型网站建设和网络营销培训 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 |