需要转载的小伙伴转载后请注明转载的地址
需要用到的库
-
<李>从bs4进口BeautifulSoup李>
<李> 李>导入请求
<李> 李>进口时间
365好书链接:http://www.365haoshu.com/爬取《我以月夜寄相思》小说
首页进入到目录:http://www.365haoshu.com/Book/Chapter/List.aspx& # 63; NovelId=3026
获取小说的每个章节的名称和章节链接
打开浏览器的开发者工具,查找一个章节:如下图,找到第一章的名称和href(也就是第一章节内容页面的链接),开始写代码
从bs4进口BeautifulSoup 进口的要求 导入的时间 #分别导入时间、请求BeautifulSoup库 url=' http://www.365haoshu.com/Book/Chapter/' #链接地址url,这章儿url节链接没全写出来是因为下面获取章节链接时要用到这些url 要求=requests.get (url + List.aspx& # 63; NovelId=0326) #打开章节页面, req_bf=BeautifulSoup (req.text“html.parser”) 打印(req_bf) #将打开的页面以文本打印出来 div=req_bf.find_all (" div " class_=皍ser-catalog-ul-li”) #分析页面,所需要的章节名和章节链接是在div标签,属性类为user-catalog-ul-li下 #找到这个下的内容,并打印 s=[] 在div: d s.append (d.find (' a ')) 打印(s) #获取div下面的一个标签下的内容 名称=[]#存储章节名 href=[] #存储章节链接 我的学生: names.append (i.find(跨度).string) href。追加(url + i.get (“href”)) #将所有的章节和章节链接存入的列表中 观察href后的链接和打开章节内容页面的链接是不完全的相同的,所以要拼接使得浏览器能直接打开章节内容
获取到链接和章节名后打开一个章节获取文本内容;
和获取章节名方法一致,一步一步查找到内容的位置
txt=requests.get (href [0]) div_bf=BeautifulSoup (txt.text html.parser) div=div_bf。find_all (" div " class_='集装箱user-reading-online pos-rel”) #打印(div) ps=BeautifulSoup (str (div),“html.parser”) p=ps.find_all (“p”, class_=' p ') 打印(p) txt=[] 病人:我的 txt.append (i.string + ' \ n ') 打印(txt)
获取单一章节完成
接下来整理代码,获取整个小说的内容,代码如下:
#——*——utf - 8编码=* 从bs4进口BeautifulSoup 进口的要求 导入的时间 类spiderstory(对象): def __init__(自我):#初始化 自我。url=' http://www.365haoshu.com/Book/Chapter/' self.names=[] #存放章节名 自我。href=[] #存放章节链接 def get_urlAndName(自我): “获取章节名和章节链接” 要求=requests.get (url=self.url + List.aspx& # 63; NovelId=0326) #获取章节目录页面 time . sleep(1) #等待1秒 div_bf=BeautifulSoup (req.text html.parser) #申请后面跟文本和html都行 div=div_bf。find_all (div, class_=user-catalog-ul-li) #查找内容,标签为div,属性为类=皍ser-catalog-ul-li” a_bf=BeautifulSoup (str (div)) 一个=a_bf.find_all (a) # #查找内容,标签为a 因为我在一个: self.names.append (i.find(跨度).string) #获取内容直接字符串就行 self.hrefs.append(自我。url + i.get (“href”)) #获取链接 def get_text(自我、url): “获取章节内容” 要求=requests.get (url=url) div_bf=BeautifulSoup (req.text“html.parser”) div=div_bf。find_all (" div " class_='集装箱user-reading-online pos-rel”) #查找内容 ps=BeautifulSoup (str (div),“html.parser”) p=ps.find_all (“p”, class_=' p ') 文本=[] 对于每个在p: text.append (each.string) 打印(文本) 返回文本#将获得的内容返回 def作家(自我、名称、路径、文本): “写文入文本档中” 打开(路径,‘一个’,编码=皍tf - 8”) f: f。写(名字+ ' \ n ') f.writelines(文本) f.write (“\ n \ n”) if __name__==癬_main__”: #运行入口 s=spiderstory () s.get_urlAndName () 勒=len (s.names) 因为我在范围(le): #利用的循环获得所有的内容 name=s.names[我] 文本=str (s.get_text (s.hrefs[我])) s.writer(名字,“我以月夜寄相思. txt”,文本) 打印(“下载完毕! ! !”)Python爬取365好书中小说代码实例