Python实现的爬取小说爬虫功能示例
本文实例讲述了Python实现的爬取小说爬虫功能。分享给大家供大家参考,具体如下:
想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单的爬虫,可以爬取爬取各个章节的内容,保存到txt文档中,支持持续更新保存。需要配置一些信息,设置文档保存路径,书名等。写着玩,可能不大规范。
#coding=utf-8 importrequests fromlxmlimportetree fromurllib.parseimporturljoin importre importos #获取页面,并返回解析整理好的文本 defget_page(url): response=requests.get(url,headers=header) set_encoding(response) text=parse_page(response.text) returntext #解析页面,将当前页面中的文字筛选出来 defparse_page(html): title=re.findall('\s+ (.+?)
',html)[0] content=re.findall('divid="content">(.*?)
','').replace(' ','').replace('\r\n\r\n','\r\n') content=title+'\r\n'+content+'\r\n\r\n' returncontent #将文本追加到file_path对应的txt中 defsave_page(path,text): withopen(path,'a',encoding='utf-8')asf: f.write(text) #设置对response得到文本的解析编码为'gbk' defset_encoding(response): response.encoding='gbk' #从配置文件中获取当前保存的链接总数 defget_current_chapters_count(path): #(1)第一次读配置文件可能没有创建,所以要支持没有文件创建文件的功能(2)如果文件存在,则不能清空,参考https://www.nhooo.com/article/158740.htm withopen(path,'a+')asf: f.seek(0) res=f.read() ifres=='': return0 else: returnint(res) #将保存的链接总数保存到配置文件中 defset_current_chapters_count(path,count): withopen(path,'w')asf: f.write(str(count)) #需要配置的字典 config_dic=dict(start_url='http://www.booktxt.net/2_2220/',#待下载小说的章节首页 latest_item=9,#列出的所有章节链接中,前面几个链接为最新章节,一般为9个,爬取时避免与最后部分重复,所以前面9个链接不爬取 bookname='赘婿',#待下载的小说名 folder_path='D:\\')#保存位置 domain='http://www.booktxt.net'#顶点网域名 if__name__=='__main__': chapter_url_list=[] response=requests.get(config_dic['start_url'],headers=header) set_encoding(response) html=etree.HTML(response.text) chapters=html.xpath('//dd') print('所有链接'+str(len(chapters))) chapters=chapters[config_dic['latest_item']:]#前9章为最新章节,后面还会重复,这里去掉 print('不重复有效章节链接'+str(len(chapters))) folder_path=config_dic['folder_path']+config_dic['bookname'] ifnotos.path.exists(folder_path): os.mkdir(folder_path) file_path=folder_path+'\\'+config_dic['bookname']+'.txt' config_file_path=folder_path+'\\'+'config.txt' print('小说存储路径为:'+file_path) print('配置文件存储路径为:'+config_file_path) saved_count=get_current_chapters_count(config_file_path)#获取目前保存的小说中已经包含的章节数 print('当前'+file_path+'中已经保存的章节总数'+str(saved_count)) ifsaved_count
更多关于Python相关内容可查看本站专题:《PythonSocket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。