无聊的练习。。。貌似网站真的有毒,我的电脑多了一个广告。。。fuck

换做好几年前我们看电子书都是在网上下载txt文件的书籍,现在各种APP阅读软件实在方便太多。
那么txt的文件就没用了吗?不呀,可以下载放kindle阅读呀!

部分网站不提供整本书籍下载,想想也是麻烦哎!既然不提供,那么,自己动手,风衣足食呀!

目标网站:http://www.136book.com/

首先 需要的库文件

import re
import os
import requests
import time
import threading
from multiprocessing import Pool
from requests import RequestException
from urllib import request
from bs4 import BeautifulSoup

根据网页链接获取整个网页代码

通过此方法获取整个网页内容,这样我们才可以做下面的页面解析

#获取页面内容
def get_page(url):user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'myheader = {'User-Agent':user_agent}try:response = requests.get(url,headers=myheader)if response.status_code == 200:return response.textreturn Noneexcept RequestException:print( '出错',url)return None

分析网页获取所有章节链接

打开网址http://www.136book.com/santiheji 用chrome浏览器右键检查查看信息
可以发现所有章节都在div id=”box1” class=”book_detail” 一共有两个这样的div标签,而我们所需要的信息是需要第二个,因为第二个包含了第一个的所有内容

代码如下

#解析页面 获取所有链接
def get_all_link(html):#用来保存所有的章节链接link_title = []soup = BeautifulSoup(html,'lxml')#获取所有章节 不要最新章节的内容all_chapter = soup.find_all('div',attrs={'class':'box1'})#在以all_chapter为内容提取所有a标签soup_all_chapter = BeautifulSoup(str(all_chapter[1]),'lxml')# print( soup_all_chapter )#获取所有的li标签all_li = soup_all_chapter.find_all('ol',attrs={'class':'clearfix'})#在获取所有a标签soup_a = BeautifulSoup(str(all_li),'lxml')all_a = soup_a.find_all('a')for a in all_a:link_title.append( a.get('href') )# print( ( a.get('href'),a.text ) )# print( link_title )return link_title

分析网页获取文本内容

首先顺便打开一本书,比如《三体》 用chrome浏览器右键检查查看信息

可以看出章节标题在 h1第1章 科学边界(1) p标签里面就是每章节的内容只要取出div id=”content”中所有的p标签里面的内容即可!

代码如下

#解析页面提取所有TXT文本 并写入文件
def get_txt_content_and_write_file(url):#获取网页文本内容html = get_page(url)# print( html )#提取文本内容soup = BeautifulSoup(html,'lxml')#获取每章节标题soup_title = soup.find('h1')# print( soup_title.text )#获取所有trsoup_tr = soup.find('tr')soup_a = BeautifulSoup(str(soup_tr),'lxml')#获取书籍名称book_name = soup_a.find_all('a')[2].text[:-4]#将标题写入文件write_file( str(soup_title.text)+'\n',book_name ) #写入数据并换行# 找出div中的内容soup_text = soup.find('div', id='content')# 输出其中的文本soup_p = BeautifulSoup(str(soup_text),'lxml')for x in (soup_p.find_all('p')):#去掉 p 标签x = str(x).replace('<p>','').replace('</p>','')#写入TXT文件write_file( x,book_name )# print( x )

获取整本书籍名称

这样后面写入文件就可以根据书籍名来创建文件夹了

#解析页面获取整本书籍名称
def get_title(html):soup = BeautifulSoup(html,'lxml')title = soup.find('h1')return title.text

写入txt文件

获取了网页上所有我们所需的内容,接下来就是写入文件

def write_file(content,book_name):file_path = 'D:\{}/{}.txt'.format(book_name,book_name)#首先创建文件夹file_directories = 'D:\{}'.format(book_name)if not os.path.exists(file_directories):os.mkdir(file_directories)#写入文件with open(file_path,'a') as f:f.flush()f.write(content+'\n') #写入数据并换行f.close()

主函数运行函数执行操作

if __name__ == '__main__':url = 'http://www.136book.com/santiheji'  #程序计时start_time = time.time()html = get_page(url)#获取书籍名称title = get_title(html )#获取所有章节链接link_title = get_all_link(html) #返回的数据是一个列表 列表内容为所有章节链接t = 0for lt in link_title:t = t+1print( lt,'已经完成',t/len(link_title)*100,'%' )#根据每个链接去拿取数据并写入文件get_txt_content_and_write_file( lt  )#结束时间end_time = time.time()print( '耗时:',end_time-start_time )

一两分钟就搞定了一本电子书,是不是很过瘾?想想如果是手动ctrl+c ctrl+v估计会想死吧…
提示,换一本书的链接也可以下载哦,哈哈哈 不放过此网站上的任何一本书籍!

120行代码爬取电子书网站相关推荐

  1. 120行代码爬取豆瓣电影top250

    笔者最近学习爬虫,拿豆瓣电影进行练手,无奈豆瓣电影存在反爬机制,爬完250就会重定向要求我进行登陆操作,所以我这一次只爬取前50进行相关测试,废话不多说,我们来看下源代码 这次用到的还是request ...

  2. Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

    Python爬虫利用18行代码爬取虎牙上百张小姐姐图片 下面开始上代码 需要用到的库 import request #页面请求 import time #用于时间延迟 import re #正则表达式 ...

  3. python:利用20行代码爬取网络小说

    文章目录 前言 一.爬虫是什么? 二.实现过程 总结 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 今天,来给大家一个分享一下如何使用20爬虫行代码爬取网络小说(这里我们以龙 ...

  4. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  5. python爬上市公司信息_实战项目 1:5 行代码爬取国内所有上市公司信息

    实战项目 1:5 行代码爬取国内所有上市公司信息 Python入门爬虫与数据分析 在正式开始这门专栏课的学习之前,我们先来看一个简单的爬虫案例.兴趣是最好的老师,当你对爬虫产生兴趣的时候,才会更有动力 ...

  6. 简单20行代码爬取王者荣耀官网1080p壁纸

    简单20行代码爬取王者荣耀官网1080p壁纸 # -*- coding: utf-8 -*- # @Time : 2020/12/13 18:08 # @Author : ningfangcong i ...

  7. Python25行代码爬取豆瓣排行榜数据

    Python25行代码爬取豆瓣排行榜数据 只需要用到requests, re ,csv 三个库即可. code import re import requests import csv url = ' ...

  8. python59行代码爬取免费ppt模板

    Python59行代码爬取某站中秋节ppt模板 网址:https://www.1ppt.com/moban/zhongqiujie/ 用到的库:requests.re.os.lxml 请求方式:GET ...

  9. 教你用python实现34行代码爬取东方财富网信息,爬虫之路,永无止境!!

    教你用python实现34行代码爬取东方财富网信息,爬虫之路,永无止境!! 代码展示: 开发环境: windows10 python3.6 开发工具: pycharm weddriver 库: sel ...

最新文章

  1. ie8加载js太慢_js ie8 慢
  2. div自动滚动_实现图片自动和手动切换的编程技巧
  3. 关于Python中if、for、with、list、dict的练习题
  4. c语言中lookup函数功能,Lookup函数详解
  5. 优秀小程序demo 源码
  6. AI实战分享 | 基于CANN的辅助驾驶应用案例
  7. C++递归或非递归实现求斐波拉契数列第n项
  8. js 事件模型 + ( 事件类型 )
  9. hdu 1159(DP+字符串最长公共序列)
  10. sftp连不上服务器 vscode_vscode+sftp 开发模式环境的同步
  11. Android开发的经典入门教材和学习路线
  12. js获取局域网ip地址
  13. 图像拼接——APAP算法
  14. 普林斯顿陈丹琦:如何让「大模型」变小
  15. 热敏打印机排版—打印机的指令
  16. 百度开放平台四部分:应用、数据、知道、地图
  17. 台式机单硬盘安装黑苹果体验
  18. 现代软件工程讲义 4 方法论 - MSF
  19. 物联网发展历史了解吗?带你看物联网节点
  20. 顺序结构不属于python语言控制结构_顺的解释|顺的意思|汉典“顺”字的基本解释...

热门文章

  1. 理解F.dropout 和nn.ReLU(inplace=True)中inplace的作用
  2. 【文献翻译】Concealed Object Detection(伪装目标检测)
  3. 打开exchange2007管理控制台时,提示没有读取服务器安全描述符的权限
  4. java 文件夹下的文件_java读取某个文件夹下的所有文件
  5. MFC之图像绘制---高速绘图控件(High-speed Charting Control)应用(一)
  6. 安卓studio访问mysql数据库_小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库-Go语言中文社区...
  7. 人脸识别: 人脸数据集大全
  8. 使用HTML+CSS制作一个简单的网页
  9. AM335x uboot 移植
  10. getRequestURI()与getRequestURL()