失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python爬虫实战 | 抓取小说网完结小说斗罗大陆

Python爬虫实战 | 抓取小说网完结小说斗罗大陆

时间:2022-11-19 10:01:56

相关推荐

Python爬虫实战 | 抓取小说网完结小说斗罗大陆

储备知识应有:Python语言程序设计

Python网络爬虫与信息提取

两门课程都是中国大学MOOC的精彩课程,特别推荐初学者。环境Python3

本文整体思路是:1.获取小说目录页面,解析目录页面,得到所有章节链接存储在一个二维列表中。对应函数allurl(urldir,html)

2.每次解析一章节,然后保存在文件中。对应函数fillFile(urldir, file)

# 下载斗罗大陆import bs4, lxml, tracebackfrom bs4 import BeautifulSoupimport requests#爬取网页信息def getHtmlText(url):try:# 设置代理 获取网页header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}r=requests.get(url, headers= header)# 判断返回状态r.raise_for_status()# 设置编码r.encoding=r.apparent_encoding# 返回网页内容return r.textexcept:return "获取网页信息失败"#解读网页信息def fillFile(urldir, file):# 总章节数numbers = len(urldir)# 当前处理的章节数index = 1# 对二维列表进行解析for i in range(numbers):# 处理一维列表child = urldir[i]text = getHtmlText(child[1])# 煲汤,解析网页信息soup = BeautifulSoup(text, 'lxml')# 获取标题title = child[0]# 捕获出现的异常try:# 获取内容content = soup.select('#content')[0].text.replace('<br/><br/>', '').strip('style56(); ')both = title + '\n' + content + '\n'file.write(both)except IndexError:print(title + '出现列表索引异常----------------')print(traceback.print_exc())except:print(title + ' 出现异常')# 打印具体的异常信息print(traceback.print_exc())print('\r{}当前已下载:{:.3f}%'.format(title,index / numbers * 100))index += 1# 解读目录信息,获取所有章节urldef allurl(urldir,html):# 煲汤,解析目录信息soup = BeautifulSoup(html,'html.parser')# 查找目录信息位置allurl = soup.find_all('div', class_="clearfix dirconone")[0]# 下行遍历获取所有的章节信息 保存在二维列表中for li in allurl.children:# 是否是标签对象if isinstance(li, bs4.element.Tag):# 读取a标签lis = li.a# 在字典类型中获取标题和链接name,link = lis.attrs['title'].split(sep=',共')[0], lis.attrs['href']urldir.append([name, link])def main():# 小说目录地址url = '/book/44/44683'# 存储所有的章节链接uinfo = []# txt文件file = open('D:斗罗大陆.txt', 'w', encoding='utf-8')# 获取网页内容html = getHtmlText(url)# 将所有目录url放入uinfoallurl(uinfo, html)# 将每一章解析到txt文件中fillFile(uinfo, file)# 关闭文件file.close()main()

如果觉得《Python爬虫实战 | 抓取小说网完结小说斗罗大陆》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。