爬虫批量下载全站小说并自动保存
目的是下载一个网站所有分类的小说,并且按照分类自动创建目录、根据小说名保存为txt文件。
一、抓取思路:
我的思路是百度一个小说网站,找到一本小说的章节页,使用requests、BeautifulSoup测试是否能
正常下载。如果能正常下载,进行下一步。
二、操作顺序:
1.导入模块,指定网页请求头:
from bs4 import BeautifulSoup import requests import time import os import randommy_headers = ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"]headers = {'User-Agent':random.choice(my_headers)#随机选取模拟浏览器 }
2.获取一本小说的章节页,并写入指定路径:
#url = 'http://www.fhxiaoshuo.com/read/3/3414/6127874.shtml'data = requests.get(url,headers=headers)time.sleep(2)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')#注意.encode('ISO-8859-1').decode('GB18030')的用法
text = soup.select('div.zhangjieTXT')[0].text title2 = soup.select('div.zhangjieming > h1')[0].text ls = [] for i in text: if i in "'\r','ads_wz_2();','\xa0','\t','\n','“','\t','■', '◆', 'n', '■', '◆', 'h', 'u', '■', '◆', 'b', ',', '∧', 'n', '♀', '※',": continue ls.append(i) text =''.join(ls) print('正在下载{}'.format(title2)) with open('.\\books\\' + 'title1' + '.txt','ab+') as f: f.write((title2 + '\r\n').encode()) #写入标题 f.write(text.encode())#写入正文 f.write('\r\n\r\n'.encode())#写入换行
3.获取一本小说的全部章节链接:
def get_urls(url,fenlei_title):#url = 'http://www.fhxiaoshuo.com/read/3/3414/'data = requests.get(url,headers=headers)time.sleep(2)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')title1 = soup.select('div#maininfo > div > h1')[0].textif not os.path.exists('.\\books\\' + fenlei_title + '\\'+ title1):os.mkdir('.\\books\\' + fenlei_title + '\\'+ title1)links = soup.select('div#list > dl')print("正在下载{}".format(title1))#ls = []for i in links:data = i.select('dd > a')time.sleep(2)for m in data:url = m.get('href')#ls.append(ls)get_text(url,title1,fenlei_title)
4.获取一个分类,比如武侠类的全部小说:
def get_list(url,fenlei_title):#url = 'http://www.fhxiaoshuo.com/sort/5/1/'data = requests.get(url,headers=headers)time.sleep(1)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')links = soup.select('div#alist')for i in links:data = i.select('div.info > div.title > h2 > a')for m in data:url = m.get('href')time.sleep(3)title = m.textget_urls(url,fenlei_title)
5.获取首页全部分类链接:
def get_fenlei():url = 'http://www.fhxiaoshuo.com/'data = requests.get(url,headers=headers)time.sleep(0.5)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')links = soup.select('div.nav1 > ul')for i in links:data = i.select('li > a')for m in data:url = m.get('href')time.sleep(1)fenlei_title = m.textif not os.path.exists('.\\books\\' + fenlei_title):os.mkdir('.\\books\\' + fenlei_title)get_list(url, fenlei_title)
三、全部代码如下(使用time.sleep()保障网页请求):
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: ssfrom bs4 import BeautifulSoup import requests import time import os import randommy_headers = ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"]headers = {'User-Agent':random.choice(my_headers) }def get_text(url,title1,fenlei_title):#url = 'http://www.fhxiaoshuo.com/read/3/3414/6127874.shtml'data = requests.get(url,headers=headers)time.sleep(2)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')text = soup.select('div.zhangjieTXT')[0].texttitle2 = soup.select('div.zhangjieming > h1')[0].textls = []for i in text:if i in "'\r','ads_wz_2();','\xa0','\t','\n','“','\t','■', '◆', 'n', '■', '◆', 'h', 'u', '■', '◆', 'b', ',', '∧', 'n', '♀', '※',":continuels.append(i)text =''.join(ls)print('正在下载{}'.format(title2))with open('.\\books\\' + fenlei_title + '\\' +title1 +'\\' + title1 + '.txt','ab+') as f:f.write((title2 + '\r\n').encode())f.write(text.encode())f.write('\r\n\r\n'.encode())def get_urls(url,fenlei_title):#url = 'http://www.fhxiaoshuo.com/read/3/3414/'data = requests.get(url,headers=headers)time.sleep(2)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')title1 = soup.select('div#maininfo > div > h1')[0].textif not os.path.exists('.\\books\\' + fenlei_title + '\\'+ title1):os.mkdir('.\\books\\' + fenlei_title + '\\'+ title1)links = soup.select('div#list > dl')print("正在下载{}".format(title1))#ls = []for i in links:data = i.select('dd > a')time.sleep(2)for m in data:url = m.get('href')#ls.append(ls) get_text(url,title1,fenlei_title)def get_list(url,fenlei_title):#url = 'http://www.fhxiaoshuo.com/sort/5/1/'data = requests.get(url,headers=headers)time.sleep(1)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')links = soup.select('div#alist')for i in links:data = i.select('div.info > div.title > h2 > a')for m in data:url = m.get('href')time.sleep(3)title = m.textget_urls(url,fenlei_title)def get_fenlei():url = 'http://www.fhxiaoshuo.com/'data = requests.get(url,headers=headers)time.sleep(0.5)soup = BeautifulSoup(data.text.encode('ISO-8859-1').decode('GB18030'),'lxml')links = soup.select('div.nav1 > ul')for i in links:data = i.select('li > a')for m in data:url = m.get('href')time.sleep(1)fenlei_title = m.textif not os.path.exists('.\\books\\' + fenlei_title):os.mkdir('.\\books\\' + fenlei_title)get_list(url, fenlei_title)get_fenlei()
asd
转载于:https://www.cnblogs.com/ssxsy/p/9040741.html
爬虫批量下载全站小说并自动保存相关推荐
- 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)
前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...
- 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)
前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...
- 简单python网络爬虫批量下载视频
寒假闲来无事,决定尝试一下用python写一个小网络爬虫批量下载视频. 由于是第一次写网络爬虫,可以说是两眼一抹黑,整个程序都是自己一点点试出来的,所以程序本身肯定有一些漏洞和缺陷,如果有建议请批评指 ...
- python爬虫批量下载“简谱”
python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...
- 新一配:perl循环调用python爬虫批量下载喜马拉雅音频
新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...
- ios Objective-c 视频下载功能实现 并自动保存到相册
ios 视频下载功能实现 并自动保存到相册(有MBProgressHUD 可以解开注释) 视频类定义属性 ///@property (nonatomic,strong) MBProgressHUD * ...
- 【爬虫实战项目】Python爬虫批量旅游景点信息数据并保存本地(附源码)
前言 今天给大家介绍的是Python爬虫批量下载旅游景点信息数据,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样 ...
- python爬虫 批量下载高清大图
文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...
- 第二弹!python爬虫批量下载高清大图
文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...
最新文章
- python语言教程-Python 基础教程
- InstallShield使用——菜单部分
- 基准测试:Apache Ignite仍然领先于Hazelcast
- 计算机网络(10)-----TCP的拥塞控制
- NeHe OpenGL教程 第三十六课:从渲染到纹理
- linux设备驱动学习(一)——简单的helloworld模块
- vxlan 分布式网关数据包转发过程_Vxlan基础
- HttpResponse类
- NoSQL 数据库 简介
- Antd Upload 和 Antd Form 结合的踩坑记录
- 英文怎么读_数学公式的英文读法
- ES6 — 箭头函数
- MySQL 8.0.12 基于Windows 安装教程
- 工艺过程卡片,工序卡片,工艺卡,刀具卡区别
- java华容道代码_Java 华容道完整源码
- 重装系统win11服务器未响应怎么修复操作
- 解决Worker 1 failed executing transaction ‘ANONYMOUS‘ at master log mall-mysql-bin.000001, end_log_pos
- 二维图像中的Hessian矩阵(及MATLAB代码)
- 机器学习中使用的独热编码
- 谷歌浏览器:无法翻译此网页
热门文章
- centos6 mysql密码_CentOS6.5下修改MySQL密码
- freebsd mysql.so,MySQL_配置FreeBSD的网关和网络服务,出现如下提示时就可以开始网 - phpStudy...
- spring的DI/IOC机制
- 【反爬】某网站雪碧图反爬
- C语言3中方法判断32还是64位机
- 神经网络(第五章补充)
- VB与C#代码转换在线工具,亲测好用
- Hadoop使用MultipleOutputs输出多文件或者指定命名
- dojo.publish 和 dojo.subscribe
- [Amaze UI] 如何推进 mobile first 的前端 Web 方案