前面我们已经完成了单章小说的爬取,现在我们来爬取整本小说

一:获取小说章节列表

在小说网站里没不 小说都有自己的章节目录,里面记录了所有的小说章节地址。
我们要想获取整本小说就要先得到小说的章节列表
m.50zw.la的章节列表格式为http://m.50zw.la/chapters_加上小说id,即http://m.50zw.la/chapters_1/这个链接指向的是id为1的小说的章节列表。
对网页结构的分析就不多说了,直接上代码:

import requests
import os
from bs4 import BeautifulSoupurl = 'http://m.50zw.la/chapters_4598/'
web_url = 'http://m.50zw.la'
re_header = {
'Referer':'http://m.50zw.la/',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36'
}chapter_list = []
i = 1
while 1:#获取网页#更改编码#获得BeautifulSoup对象#获取章节列表#url + str(i)第i页的urlr = requests.get(url + str(i),params=re_header)r.encoding = 'gbk'soup = BeautifulSoup(r.text,"html.parser")i+=1print(url + str(i))temp_list = soup.select('.last9 a')for t in range(len(temp_list)):temp_list[t] = temp_list[t]['href']del temp_list[0]if(len(temp_list)==0):breakchapter_list.extend(temp_list)for t in chapter_list:print(t)

二:通过章节列表获取章节内

将章节列表打印出来,我们发现之前获取到的章节链接全部是相对地址,我们还需要在前面加上主站地址

#将上面的for循环修改如下
for i in range(len(chapter_list)):chapter_list[i] = 'http://m.50zw.la' + chapter_list[i]print(chapter_list[i])

获取章节内容的代码如下:

#打开/创建文件
fo = open('1.txt','wb')for t in chapter_list:#获取第一页页面r = requests.get(t,params=re_header)r.encoding = 'gbk'soup = BeautifulSoup(r.text,"html.parser")#这个网站把每个章节分为两页,要分两次获取#获取章节名和第一页的内容title = soup.select('.nr_title')[0].textcontent_1 = soup.select('#nr1')[0].text#获取第二页页面r = requests.get(t.replace('.html','_2.html'),params=re_header)r.encoding = 'gbk'soup = BeautifulSoup(r.text,"html.parser")#第二部分章节内容content_2 = soup.select('#nr1')[0].text#拼接两部分内容 详细请搜索字符串join方法str1 = ''chapter_content = str1.join([content_1,content_2])#写入章节名和内容fo.write((title).encode('utf-8'))fo.write((chapter_content).encode('utf-8'))#打印提示print(title + '已下载')#关闭文件
fo.close()

完整代码

import requests
import os
from bs4 import BeautifulSoupurl = 'http://m.50zw.la/chapters_4598/'
web_url = 'http://m.50zw.la'
re_header = {
'Referer':'http://m.50zw.la/',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36'
}'''***************************获取章节列表**********************************'''
chapter_list = []
i = 1
while 1:#获取网页#更改编码#获得BeautifulSoup对象#获取章节列表#url + str(i)第i页的urlr = requests.get(url + str(i),params=re_header)r.encoding = 'gbk'soup = BeautifulSoup(r.text,"html.parser")i+=1print(url + str(i))temp_list = soup.select('.last9 a')for t in range(len(temp_list)):temp_list[t] = temp_list[t]['href']del temp_list[0]if(len(temp_list)==0):breakchapter_list.extend(temp_list)for i in range(len(chapter_list)):chapter_list[i] = 'http://m.50zw.la' + chapter_list[i]print(chapter_list[i])'''***********************************获取章节内容*************************'''
#打开/创建文件
fo = open('1.txt','wb')for t in chapter_list:#获取第一页页面r = requests.get(t,params=re_header)r.encoding = 'gbk'soup = BeautifulSoup(r.text,"html.parser")#这个网站把每个章节分为两页,要分两次获取#获取章节名和第一页的内容title = soup.select('.nr_title')[0].textcontent_1 = soup.select('#nr1')[0].text#获取第二页页面r = requests.get(t.replace('.html','_2.html'),params=re_header)r.encoding = 'gbk'soup = BeautifulSoup(r.text,"html.parser")#第二部分章节内容content_2 = soup.select('#nr1')[0].text#拼接两部分内容 详细请搜索字符串join方法str1 = ''chapter_content = str1.join([content_1,content_2])#写入章节名和内容fo.write((title).encode('utf-8'))fo.write((chapter_content).encode('utf-8'))#打印提示print(title + '已下载')#关闭文件
fo.close()print('下载成功')

虽然我们爬取到了整本小说,但速度实在是不能忍,所以我用多线程优化了一下

下一篇:多线程爬取单本小说

python学习(二)爬虫——爬取网站小说并保存为txt文件(二)相关推荐

  1. Python爬虫练习笔记——爬取一本小说并保存为txt文件

    最近竟然开始磕起了黄晓明和尹正的CP!!! 但是万恶的爱某艺不好好更新剧集,居然搞起了超前点映- WTF???有什么是我这个贫穷而又尊贵的VIP用户不能看的吗??? 于是我决定开始看小说了!找个网站把 ...

  2. 【网络爬虫】爬取网络小说并保存为txt

    爬虫爬取网络小说并保存为txt文件 最近突然想看小说,但是苦于无法下载为txt,于是秉持着"自己动手,丰衣足食"的原则,自己写了一个爬虫,仅供参考~ 这里就以火星引力的<逆天 ...

  3. 基于Python实现的网络爬虫项目——多线程下载小说并保存为txt文件(包含完整代码及注释)

    基于Python实现的网络爬虫项目--多线程下载小说并保存为txt文件(包含完整代码及注释) 一.确立预期目标 二.完成项目所需工具 三.项目需要解决的问题 问题一 问题二 问题三 问题四 问题五 问 ...

  4. Python爬取起点小说并保存到本地文件夹和MongoDB数据库中

    Python爬取起点小说并保存到本地MongoDB数据库中 工具:Python3.7 + Mongo4.0 + Pycharm """ 爬取起点小说<诡秘之主> ...

  5. python学习笔记爬虫——爬取智联招聘信息

    目的:自己输入指定地方,指定职业,起始页数,程序会自动打印页面的所有信息. 实现过程:这次程序的代码跟以往的都不一样,这次也是我第一次使用面向对象式编程,并且并不是分析网页代码,分析json字符串得到 ...

  6. Python爬虫爬取微博热搜保存为 Markdown 文件

    微博热搜榜python爬虫,仅供学习交流 源码及注释: # -*- coding=UTF-8 -*- #!usr/bin/env pythonimport os import time import ...

  7. python如何爬取网站所有目录_用python爬虫爬取网站的章节目录及其网址

    认识爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  8. 如何使用robots禁止各大搜索引擎爬虫爬取网站

    如何使用robots禁止各大搜索引擎爬虫爬取网站 一.总结 一句话总结:假如此网站禁止爬虫抓取,那么,只要在网站的根目录下,创建一个robots.txt文件 User-agent: * Disallo ...

  9. Python爬虫 爬取歌曲的评论并写入txt

    文章目录 一.实验任务 二.所需库函数 三.参考代码 四.实验结果 五.遇到的问题 六.写在最后 一.实验任务 进入网易云音乐周杰伦主页面爬取对应歌曲的评论,以歌名保存为txt文件 二.所需库函数 本 ...

最新文章

  1. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(下)
  2. 【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )
  3. navicate破解失败后删除注册表
  4. node+express+mongDB实现简单登录注册
  5. spring mybatis 整合jar 包冲突问题
  6. 三言两语说说进程调度
  7. oracle体系三大文件,oracle 体系_第三章控制文件
  8. c++ pdflib输出表格_DescrTab2包,输出SCI级别的描述统计表
  9. metamask源码学习-ui/index.js
  10. .Net程序猿玩转Android开发---(8)表格布局TableLayout
  11. macbook python安装_mac下安装Python3.*(最新版本)
  12. java如何配置环境变量_java如何配置环境变量
  13. 【FLY】C语言知识点总结
  14. QT项目六:简易客户信息管理系统
  15. 头歌实践平台:机器学习——支持向量回归
  16. 云计算机可持续发展的关键,云计算发展的几个关键问题及可持续发展性
  17. 一文理解UDS安全访问服务(0x27)
  18. 阿里云服务器最新优惠价格及最新收费标准(2023更新)
  19. vue.runtime.esm.js:4560 [Vue warn]: Property or method “item“ is not defined on the instance but
  20. 一篇文章搞懂互联网商业模式,以及一些鲜为人知的玩法

热门文章

  1. 等保2.0基本安全要求之技术要求分类
  2. 地图可视化技术的应用现状
  3. 编译linux kernel samples 模块
  4. AOC 27G2 评测
  5. 小学计算机学科工作计划,2023年小学信息技术学科工作计划
  6. java版坦克大战_java版坦克大战 - 源码下载|源代码 - 源码中国
  7. 从沙盒开始学习Cesium(持续更新)
  8. 基于80c51的倒计时音乐播放器
  9. 「Vue To Words」 - 教你在Vue项目中导出Word文档(包含表格合并,图片修改大小)
  10. Nature子刊|“二代+三代”宏基因组学揭示肠道微生物群的个性化结构变异