Python爬虫-爬取17K小说
随笔记录方便自己和同路人查阅。
#————————————————我是可耻的分割线——————————————-
这是一个爬取用户17k小说网站爬虫。
#————————————————我是可耻的分割线——————————————-
# !/usr/bin/env python # -*- coding: UTF-8 -*- __author__ = \'Mr.Li\' from bs4 import BeautifulSoup import requests, sys """ 类说明:下载《17K》网小说 Parameters: 无 Returns: 无 Modify: 2019-05-13 """ class downloader(object): def __init__(self): """ :rtype: object """ self.server = \'http://www.17k.com\' # 网站地址 self.target = \'http://www.17k.com/list/2731559.html\' # 目录URL地址 self.names = [] #存放章节名 self.urls = [] #存放章节链接 self.nums = 0 #章节数 """ 函数说明:获取下载链接 Parameters: 无 Returns: 无 Modify: 2017-09-13 """ def get_downloader_url(self): req = requests.get(self.target) # 获取URL地址内容 req.encoding = \'utf-8\' # 转码 html = req.text # 保存get到的内容 div_bf = BeautifulSoup(html, \'html.parser\') # 使用BeautifulSoup进行解析 div = div_bf.find_all(\'div\', class_=\'Main List\') # 查询符合条件的内容 a_bf = BeautifulSoup(str(div[0]),\'html.parser\')#重新解析 a = a_bf.find_all(\'a\')#查找元素为\'a\'的内容 self.nums = len(a[11:]) for each in a[11:]: self.names.append(each.string)#把章节名称添加到变量 self.urls.append(self.server + each.get(\'href\'))#把章节URL地址添加到变量 """ 函数说明:获取章节内容 Parameters: target - 下载连接(string) Returns: texts - 章节内容(string) Modify: 2019-05-13 """ def get_contents(self,target): req = requests.get(target)#获取URL地址内容 req.encoding = \'utf-8\'#解码 html = req.text bf = BeautifulSoup(html, \'html.parser\')#解析 texts = bf.find_all(\'div\', class_=\'readAreaBox content\')#使用查找章节正文 texts = texts[0].text.replace(\'\xa0\' * 8, \'\n\n\')#使用replace方法,剔除空格,替换为回车进行分段 return texts """ 函数说明:将爬取的文章内容写入文件 Parameters: name - 章节名称(string) path - 当前路径下,小说保存名称(string) text - 章节内容(string) Returns: 无 Modify: 2019-05-13 """ def writer(self, name, path, text): write_flag = True with open(path, \'a\', encoding=\'utf-8\') as f: f.write(name + \'\n\') f.writelines(text) f.write(\'\n\n\') if __name__ == "__main__": dl = downloader() dl.get_downloader_url() print(\'《正道潜龙》开始下载:\') for i in range(dl.nums): dl.writer(str(dl.names[i]), \'正道潜龙.txt\', dl.get_contents(dl.urls[i])) sys.stdout.write(" 已下载:%.3f%%" % float(i/dl.nums) + \'\r\') sys.stdout.flush() print(\'《正道潜龙》下载完成\')
版权声明:本文为lirongyang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。