目的是下载一个网站所有分类的小说,并且按照分类自动创建目录、根据小说名保存为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

爬虫批量下载全站小说并自动保存相关推荐

  1. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  2. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  3. 简单python网络爬虫批量下载视频

    寒假闲来无事,决定尝试一下用python写一个小网络爬虫批量下载视频. 由于是第一次写网络爬虫,可以说是两眼一抹黑,整个程序都是自己一点点试出来的,所以程序本身肯定有一些漏洞和缺陷,如果有建议请批评指 ...

  4. python爬虫批量下载“简谱”

    python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...

  5. 新一配:perl循环调用python爬虫批量下载喜马拉雅音频

    新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...

  6. ios Objective-c 视频下载功能实现 并自动保存到相册

    ios 视频下载功能实现 并自动保存到相册(有MBProgressHUD 可以解开注释) 视频类定义属性 ///@property (nonatomic,strong) MBProgressHUD * ...

  7. 【爬虫实战项目】Python爬虫批量旅游景点信息数据并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载旅游景点信息数据,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样 ...

  8. python爬虫 批量下载高清大图

    文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...

  9. 第二弹!python爬虫批量下载高清大图

    文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...

最新文章

  1. python语言教程-Python 基础教程
  2. InstallShield使用——菜单部分
  3. 基准测试:Apache Ignite仍然领先于Hazelcast
  4. 计算机网络(10)-----TCP的拥塞控制
  5. NeHe OpenGL教程 第三十六课:从渲染到纹理
  6. linux设备驱动学习(一)——简单的helloworld模块
  7. vxlan 分布式网关数据包转发过程_Vxlan基础
  8. HttpResponse类
  9. NoSQL 数据库 简介
  10. Antd Upload 和 Antd Form 结合的踩坑记录
  11. 英文怎么读_数学公式的英文读法
  12. ES6 — 箭头函数
  13. MySQL 8.0.12 基于Windows 安装教程
  14. 工艺过程卡片,工序卡片,工艺卡,刀具卡区别
  15. java华容道代码_Java 华容道完整源码
  16. 重装系统win11服务器未响应怎么修复操作
  17. 解决Worker 1 failed executing transaction ‘ANONYMOUS‘ at master log mall-mysql-bin.000001, end_log_pos
  18. 二维图像中的Hessian矩阵(及MATLAB代码)
  19. 机器学习中使用的独热编码
  20. 谷歌浏览器:无法翻译此网页

热门文章

  1. centos6 mysql密码_CentOS6.5下修改MySQL密码
  2. freebsd mysql.so,MySQL_配置FreeBSD的网关和网络服务,出现如下提示时就可以开始网 - phpStudy...
  3. spring的DI/IOC机制
  4. 【反爬】某网站雪碧图反爬
  5. C语言3中方法判断32还是64位机
  6. 神经网络(第五章补充)
  7. VB与C#代码转换在线工具,亲测好用
  8. Hadoop使用MultipleOutputs输出多文件或者指定命名
  9. dojo.publish 和 dojo.subscribe
  10. [Amaze UI] 如何推进 mobile first 的前端 Web 方案