当前位置:脚本大全 > > 正文

python实现网络爬虫的步骤(Python实现的爬取小说爬虫功能示例)

时间:2021-10-24 10:39:32类别:脚本大全

python实现网络爬虫的步骤

Python实现的爬取小说爬虫功能示例

本文实例讲述了Python实现的爬取小说爬虫功能。分享给大家供大家参考,具体如下:

想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单的爬虫,可以爬取爬取各个章节的内容,保存到txt文档中,支持持续更新保存。需要配置一些信息,设置文档保存路径,书名等。写着玩,可能不大规范。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • # coding=utf-8
  • import requests
  • from lxml import etree
  • from urllib.parse import urljoin
  • import re
  • import os
  • # 获取页面,并返回解析整理好的文本
  • def get_page(url):
  •   response = requests.get(url, headers=header)
  •   set_encoding(response)
  •   text = parse_page(response.text)
  •   return text
  • # 解析页面,将当前页面中的文字筛选出来
  • def parse_page(html):
  •   title = re.findall('<li class="bookname">\s+<h1>(.+?)</h1>', html)[0]
  •   content = re.findall('li id="content">(.*?)</li>', html, re.S)[0]
  •   content = content.replace('<br />', '').replace(' ', ' ').replace('\r\n\r\n', '\r\n')
  •   content = title + '\r\n' + content + '\r\n\r\n'
  •   return content
  • # 将文本追加到file_path对应的txt中
  • def save_page(path, text):
  •   with open(path, 'a', encoding='utf-8') as f:
  •     f.write(text)
  • # 设置对response得到文本的解析编码为'gbk'
  • def set_encoding(response):
  •   response.encoding = 'gbk'
  • # 从配置文件中获取当前保存的链接总数
  • def get_current_chapters_count(path):
  •   # (1)第一次读配置文件可能没有创建,所以要支持没有文件创建文件的功能(2)如果文件存在,则不能清空,参考http://www.zzvips.com/article/158740.htm
  •   with open(path, 'a+') as f:
  •     f.seek(0)
  •     res = f.read()
  •     if res == '':
  •       return 0
  •     else:
  •       return int(res)
  • # 将保存的链接总数保存到配置文件中
  • def set_current_chapters_count(path, count):
  •   with open(path, 'w') as f:
  •     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']
  •   if not os.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))
  •   if saved_count < len(chapters): # 说明有更新
  •     set_current_chapters_count(config_file_path, len(chapters))
  •     print('共更新 ' + str(len(chapters) - saved_count) + ' 章')
  •     for c in chapters[saved_count:]: # 从上次保存的位置开始继续保存
  •       url = c.xpath('a/@href')[0]
  •       url = urljoin(domain, url)
  •       txt = c.xpath('a/text()')[0]
  •       chapter_url_list.append(url)
  •       print(url)
  •       print(txt)
  •       save_page(file_path, get_page(url))
  •   else:
  •     print('小说还没有更新哦')
  • 希望本文所述对大家Python程序设计有所帮助。

    原文链接:https://blog.csdn.net/SunCherryDream/article/details/79070687

    上一篇下一篇

    猜您喜欢

    热门推荐