天天看点

python爬取重名div_第6天 | 10天搞定Python网络爬虫,爬盗墓笔记,牛6.1 爬取目标6.2 节点定位里面,文章的内容节点是在div.bg > div.content > div.single-content > div > div.content里的6.3 爬小说

前几天,有老铁留言说能不能VIP小说?-我回复说他是"坏人",因为我觉得他不尊重别人的劳动成果,如果是免费的,我倒可以考虑。

于是,我上网找呀找,搜呀搜,看有没有免费版,而且是大家都喜欢看的免费小说,爬下来,放在手机上看。经过终于让我找到了近几年特别火的、免费版的《盗墓笔记》。

6.1 爬取目标

用Chrome浏览器,打开http://seputu.com网址的那一刻,小伙伴们都惊呆了,第1部到第8部都有。爬取内容:把书名,章节名称,章节链接抽取出来,同时将每个文章的内容提取出来,保存成txt文件。将书名作为文件夹名称,将章节名称作为txt文件名。

python爬取重名div_第6天 | 10天搞定Python网络爬虫,爬盗墓笔记,牛6.1 爬取目标6.2 节点定位里面,文章的内容节点是在div.bg > div.content > div.single-content > div > div.content里的6.3 爬小说

6.2 节点定位

用F12查看源代码,你会发现htm的页面l结构非常分明,书名的html节点是// div[ @ class = "mulu-title"] / center / h2里面,章节节点的内容(章节名称和链接)是// div[ @ class = "box"] / ul标签中。Xpath规则挺简单的。

python爬取重名div_第6天 | 10天搞定Python网络爬虫,爬盗墓笔记,牛6.1 爬取目标6.2 节点定位里面,文章的内容节点是在div.bg > div.content > div.single-content > div > div.content里的6.3 爬小说

点击第1章节链接,进入详细页面,链接地址为:,页面详细内容分析,标题节点是在div.bg > h1的

里面,文章的内容节点是在div.bg > div.content > div.single-content > div > div.content里的

标签里面。Xpath的规则挺简单的。

6.3 爬小说

爬取小说内容有点多,编程不要急,理清思路,逐步实现功能。小说标题,作为文件夹名称。每章详细内容,存到对应的文件里面。在换页爬取时,暂停2秒钟,模拟真人点击链接的行为,否则会被认为是爬虫。

import requestsfrom requests.exceptions import RequestExceptionfrom lxml import etreefrom lxml.etree import ParseErrorimport timeimport os# 获取小说数据class Storybook:    headers = {        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "                      "(KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"    }    def __init__(self, link):        self.link = link    def get_detail(self, title, section, href):        try:            # 创建文件            filename = title + "/" + section + ".txt"            fd = open(filename, mode="w", encoding="utf-8")            res = requests.get(href, headers=self.headers)            # 解决乱码问题            res.encoding = 'utf-8'            # 解析HTML文本内容            html = etree.HTML(res.text)            contents = html.xpath('// div[ @ class = "content-body"] / p')            for p in contents:                data = p.text.strip() + ""                fd.write(data)            fd.close()        except RequestException:            print("请求服务器异常")        except ParseError:            print("数据解析错误")        except IOError:            print("创建文件夹失败")    def get_page(self):        try:            res = requests.get(self.link, headers=self.headers)            # 解析HTML文本内容            html = etree.HTML(res.text, etree.HTMLParser())            # 定位至需要的标签            titles = html.xpath('// div[ @ class = "mulu-title"] / center / h2')            contents = html.xpath('// div[ @ class = "box"] / ul ')            i = 0            for ul in contents:                # 标题为文件夹名称                title = titles[i].text                # 创建文件夹                os.mkdir(title)                a_list = ul.xpath('li /a')                for a in a_list:                    # 章节名称                    section = a.text                    href = a.get("href")                    # 爬取小说详细内容                    self.get_detail(title, section, href)                    # 暂停时间2秒,进入下一个详细内容                    time.sleep(2)                # 暂停2秒,进入下一章                time.sleep(2)                i += 1            return None        except RequestException:            print("请求服务器异常")            return None        except ParseError:            print("数据解析错误")            return None        except IOError:            print("创建文件夹失败")            return Noneif __name__ == '__main__':    sb = Storybook("http://seputu.com")    sb.get_page()
           

输出结果

python爬取重名div_第6天 | 10天搞定Python网络爬虫,爬盗墓笔记,牛6.1 爬取目标6.2 节点定位里面,文章的内容节点是在div.bg > div.content > div.single-content > div > div.content里的6.3 爬小说

好了,有关爬取小说的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。分享Python,前端(小程序)、App和嵌入式方面的干货。关注我,没错的。

#Python##网络爬虫##程序员##爬虫##盗墓笔记#