Python爬取365好书中小说代码实例
需要转载的小伙伴转载后请注明转载的地址
需要用到的库
- frombs4importBeautifulSoup
- importrequests
- importtime
365好书链接:http://www.365haoshu.com/爬取《我以月夜寄相思》小说
首页进入到目录:http://www.365haoshu.com/Book/Chapter/List.aspx?NovelId=3026
获取小说的每个章节的名称和章节链接
打开浏览器的开发者工具,查找一个章节:如下图,找到第一章的名称和href(也就是第一章节内容页面的链接),开始写代码
frombs4importBeautifulSoup importrequests importtime #分别导入time、requests、BeautifulSoup库 url='http://www.365haoshu.com/Book/Chapter/' #链接地址url,这儿url章节链接没全写出来是因为下面获取章节链接时要用到这些url req=requests.get(url+'List.aspx?NovelId=0326') #打开章节页面, req_bf=BeautifulSoup(req.text,"html.parser") print(req_bf) #将打开的页面以text打印出来 div=req_bf.find_all('div',class_='user-catalog-ul-li') #分析页面,所需要的章节名和章节链接是在div标签,属性class为user-catalog-ul-li下 #找到这个下的内容,并打印 s=[] fordindiv: s.append(d.find('a')) print(s) #获取div下面的a标签下的内容 names=[]#存储章节名 hrefs=[]#存储章节链接 foriins: names.append(i.find('span').string) hrefs.append(url+i.get('href')) #将所有的章节和章节链接存入的列表中 观察href后的链接和打开章节内容页面的链接是不完全的相同的,所以要拼接使得浏览器能直接打开章节内容
获取到链接和章节名后打开一个章节获取文本内容;
和获取章节名方法一致,一步一步查找到内容的位置
txt=requests.get(hrefs[0]) div_bf=BeautifulSoup(txt.text,'html.parser') div=div_bf.find_all('div',class_='containeruser-reading-onlinepos-rel') #print(div) ps=BeautifulSoup(str(div),"html.parser") p=ps.find_all('p',class_='p-content') print(p) txt=[] foriinp: txt.append(i.string+'\n') print(txt)
获取单一章节完成
接下来整理代码,获取整个小说的内容,代码如下:
#--*--coding=utf-8--*-- frombs4importBeautifulSoup importrequests importtime classspiderstory(object): def__init__(self):#初始化 self.url='http://www.365haoshu.com/Book/Chapter/' self.names=[]#存放章节名 self.hrefs=[]#存放章节链接 defget_urlAndName(self): '''获取章节名和章节链接''' req=requests.get(url=self.url+'List.aspx?NovelId=0326')#获取章节目录页面 time.sleep(1)#等待1秒 div_bf=BeautifulSoup(req.text,"html.parser")#req后面跟text和html都行 div=div_bf.find_all('div',class_='user-catalog-ul-li')#查找内容,标签为div,属性为class='user-catalog-ul-li' a_bf=BeautifulSoup(str(div)) a=a_bf.find_all('a')##查找内容,标签为a foriina: self.names.append(i.find('span').string)#获取内容直接string就行 self.hrefs.append(self.url+i.get('href'))#获取链接 defget_text(self,url): '''获取章节内容''' req=requests.get(url=url) div_bf=BeautifulSoup(req.text,"html.parser") div=div_bf.find_all('div',class_='containeruser-reading-onlinepos-rel')#查找内容 ps=BeautifulSoup(str(div),"html.parser") p=ps.find_all('p',class_='p-content') text=[] foreachinp: text.append(each.string) print(text) returntext#将获得的内容返回 defwriter(self,name,path,text): '''写入text文档中''' withopen(path,'a',encoding='utf-8')asf: f.write(name+'\n') f.writelines(text) f.write('\n\n') if__name__=="__main__":#运行入口 s=spiderstory() s.get_urlAndName() le=len(s.names) foriinrange(le):#利用for循环获得所有的内容 name=s.names[i] text=str(s.get_text(s.hrefs[i])) s.writer(name,"我以月夜寄相思.txt",text) print('下载完毕!!!')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。