序言
文中的文本及图片来自互联网,仅作学习培训 、沟通交流应用,不具备一切商业行为,如有什么问题请立即在线留言以作解决。
前文
01、python网络爬虫基础教程01:豆瓣网Top影片爬取
基础开发工具
- Python 3.6
- Pycharm
有关控制模块的应用
- requests
- parsel
安裝Python并加上到环境变量,pip安装必须的有关控制模块就可以 。
单章爬取
一、确立要求
爬取小说內容储存到当地
- 小说姓名
- 小说章节目录姓名
- 小说內容
# 第一章小说url地址 url = 'http://www.biquges.com/52_52642/25585323.html'
url = 'http://www.biquges.com/52_52642/25585323.html' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } response = requests.get(url=url, headers=headers) print(response.text)
要求网页页面回到的数据信息中出現了错码 ,这就必须大家转换格式了。
加一行编码全自动转换格式。
response.encoding = response.apparent_encoding
三 、分析数据信息
依据css选择符能够立即获取小说题目及其小说內容 。
def get_one_novel(html_url): # 启用要求网页页面数据信息涵数 response = get_response(html_url) # 改行成selector分析目标 selector = parsel.Selector(response.text) # 获得小说题目 title = selector.css('.bookname h1::text').get() # 获得小说內容 回到的是list content_list = selector.css('#content::text').getall() # ''.join(目录) 把目录转化成字符串数组 content_str = ''.join(content_list) print(title, content_str) if __name__ == '__main__': url = 'http://www.biquges.com/52_52642/25585323.html' get_one_novel(url)
四 、储存数据信息(数据信息持久化)
应用常见的储存方法: with open
def save(title, content): """ 储存小说 :param title: 小说章节目录题目 :param content: 小说內容 :return: """ # 途径 filename = f'{title}\\' # os 内嵌控制模块,全自动创建文件夹 if os.makedirs(filename): os.mkdir() # 一定要还记得加后缀名 .txt mode 储存方法 a 是增加储存 encoding 储存编号 with open(filename title '.txt', mode='a', encoding='utf-8') as f: # 载入题目 f.write(title) # 自动换行 f.write('\n') # 载入小说內容 f.write(content)
储存一章小说,就是这样写完了 ,假如要想储存全本小说呢?
全本小说网络爬虫
即然爬取单章小说了解如何爬取了 ,那麼只必须获得小说全部单章小说的url地址,就可以爬取所有小说內容了 。
全部的单章的url地址都是在 dd 标识之中,可是这一url地址不是详细的 ,因此爬取出来的情况下,要拼凑url地址。
def get_all_url(html_url): # 启用要求网页页面数据信息涵数 response = get_response(html_url) # 改行成selector分析目标 selector = parsel.Selector(response.text) # 全部的url地址都是在 a 标识里边的 href 特性中 dds = selector.css('#list dd a::attr(href)').getall() for dd in dds: novel_url = 'http://www.biquges.com' dd print(novel_url) if __name__ == '__main__': url = 'http://www.biquges.com/52_52642/index.html' get_all_url(url)
那样就获得了全部的小说章节目录url地址了。
爬取全本阅读详细编码
import requests import parsel from tqdm import tqdm def get_response(html_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } response = requests.get(url=html_url, headers=headers) response.encoding = response.apparent_encoding return response def save(novel_name, title, content): """ 储存小说 :param title: 小说章节目录题目 :param content: 小说內容 :return: """ filename = f'{novel_name}' '.txt' # 一定要还记得加后缀名 .txt mode 储存方法 a 是增加储存 encoding 储存编号 with open(filename, mode='a', encoding='utf-8') as f: # 载入题目 f.write(title) # 自动换行 f.write('\n') # 载入小说內容 f.write(content) def get_one_novel(name, novel_url): # 启用要求网页页面数据信息涵数 response = get_response(novel_url) # 改行成selector分析目标 selector = parsel.Selector(response.text) # 获得小说题目 title = selector.css('.bookname h1::text').get() # 获得小说內容 回到的是list content_list = selector.css('#content::text').getall() # ''.join(目录) 把目录转化成字符串数组 content_str = ''.join(content_list) save(name, title, content_str) def get_all_url(html_url): # 启用要求网页页面数据信息涵数 response = get_response(html_url) # 改行成selector分析目标 selector = parsel.Selector(response.text) # 全部的url地址都是在 a 标识里边的 href 特性中 dds = selector.css('#list dd a::attr(href)').getall() # 小说姓名 novel_name = selector.css('#info h1::text').get() for dd in tqdm(dds): novel_url = 'http://www.biquges.com' dd get_one_novel(novel_name, novel_url) if __name__ == '__main__': novel_id = input('键入小说名字ID:') url = f'http://www.biquges.com/{novel_id}/index.html' get_all_url(url)