120行代码爬取电子书网站

news/2024/5/10 12:06:17/文章来源:https://blog.csdn.net/Fmuma/article/details/78299153

无聊的练习。。。貌似网站真的有毒,我的电脑多了一个广告。。。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估计会想死吧…
提示,换一本书的链接也可以下载哦,哈哈哈 不放过此网站上的任何一本书籍!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_897670.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站图片多导致网站加载慢怎么解决?

就以本站为例&#xff0c;我发现网站速度加载特别慢&#xff0c;那么好&#xff0c;直接打开浏览器开发者面板找问题&#xff0c;在network面板下我们先清空所有请求信息&#xff0c;然后强刷网页(CtrlF5)&#xff0c;看看是那些资源请求影响了网站速度&#xff1a; 我这里呢…

实用的在线网站

目录 文档类 1. 轻松玩转PDF 2. Convertio&#xff1a;在线的文件转换器 3. CleverPDF 4. vvv文档在线导出工具 5. 微信公众号格式化编辑器 6. Process On&#xff1a;免费在线作图&#xff0c;实时协作 7. ALL TO ALL&#xff08;在线格式转换&#xff09; 8. Office…

基于selenium和PhantomJS的python模拟登录豆瓣网站

首先先登录豆瓣网站&#xff1a;https://www.douban.com/&#xff0c;审查元素&#xff0c;我们可以发现&#xff0c;他的登录是做为一个模块被引入的 登录模块被放入了iframe中&#xff0c;所以我们直接通过 driver.find_element_by_class_name("account-tab-account&q…

github+hexo搭建自己的博客网站(五)进阶配置(畅言实现博客的评论)

如何对如何搭建hexogithub可以查看我第一篇入门文章&#xff1a;http://www.cnblogs.com/chengxs/p/7402174.html 详细的可以查看hexo博客的演示&#xff1a;https://saucxs.github.io/ 同时绑定了域名&#xff1a;http://www.chengxinsong.cn/ 可以查看在github上生成的静态…

用 IIS 7、ARR 與 Velocity 建设高性能的大型网站

本帖是研讨会中的一些杂记&#xff0c;搭配一些官方的文档&#xff0c;经整合归纳后&#xff0c;介绍 IIS 7 如何搭配新一代的 ARR (Application Request Routing)&#xff0c;建置 Server Farm 并达到比过去 NLB 更优的 Load Balancing 功能&#xff0c;此外还介绍微软新一代的…

网站搭建项目一

1.搭建mysql proxy&#xff0c;实现读写分离 mysql proxy - lua script mysql proxy 不应该在生产环境中使用 1) mysql-master server&#xff08;vm1&#xff09;端&#xff1a; yum -y install mysql-server mysql-connector-odbc // 不用装mysql mysql-devel /etc/init.d/…

magento|网站后台对评论进行回复的功能拓展

最近运营部门提出要增加评论回复并显示的功能&#xff0c;所以大体流程就是数据库增加字段&#xff0c;然后编辑评论的时候增加输入框&#xff0c;提交评论的时候保存回复数据&#xff0c;最后在前台显示即可。 具体操作及代码如下&#xff1a; 1、review_detail新增字段&…

linux|ubuntu安装prerender解决vue前后端分离后的seo问题

商城网站进行了前后端分离&#xff0c;使用vue框架对系统进行了整体重构。重构之后seo基本失效&#xff0c;搜索引擎的机器人无法抓取到网站的源代码&#xff0c;所以需要考虑解决seo的问题。结合前端人员的建议&#xff0c;使用prerender进行处理&#xff0c;具体流程如下&…

linux|nginx开启gzip提升网站访问速度

gzip on; #开启gzip gzip_vary on; gzip_disable "msie6"; gzip_min_length 1k; #不压缩临界值,大于1k的才压缩,一般不用改 gzip_buffers 4 16k; gzip_comp_level 6; #压缩级别,数字越大压缩的越好 gzip_types text/plain application/jav…

前后端分离的过程利用prerender解决seo问题的误区

网站进行前后端分离之后&#xff0c;需要解决seo的问题。本来使用的是prerender服务&#xff0c;具体的流程如https://blog.csdn.net/lolgigeo/article/details/102897876所述&#xff0c;上述链接为本人初步的尝试&#xff0c;但经过再次的排查发现存在一个很大的误区。首先&a…

渗透实战之对外国一网站进行的SQL盲注测试

起因&#xff1a;大早上体育课改成了线上&#xff0c;又正逢看到大佬发了一篇SQL注入文章&#xff0c;就想着复现一下&#xff0c;练练手&#xff0c;本篇就是记录一下渗透过程。 先判断闭合类型 1/1如下 1/0如下 两次回显不一样&#xff0c;说明是数字型注入&#xff0c;尝试…

中电信低调推出微博网站

4月27日凌晨消息&#xff0c;继中移动之后&#xff0c;中电信近日也在低调推出微博网站。这或许意味着&#xff0c;在多年尝试转型互联网之后&#xff0c;国内运营商正在围绕最新业务再次展开布局。 腾讯科技在北京某大学的校园活动中发现&#xff0c;中电信旗下的微博网站“…

3.cn网站分析-退出率与跳出率详解

跳出率&#xff08;Bounce Rate&#xff09;:浏览单页即退出的次数/访问次数 退出率&#xff08;Exit Rate&#xff09;&#xff1a;离开次数&#xff08;包括一次访问过程中用户浏览单页即跳出的次数&#xff0c;也包括浏览多页后从该页面退出的次数&#xff09;/进入该页的…

准确度量 持续改进—网站分析驱动目标达成

1 为什么要对网站进行分析&#xff1f; 首先是第一部分&#xff0c;我们为什么要对网站进行分析&#xff1f;网站分析并不是所有网站的标准配置&#xff0c;很多网站都没有做这个工作&#xff0c;他们也运营的很好。那么我们为什么需要网站分析呢&#xff1f; 在回答这些问题之…

python3 某网站注册脚本 自用

python脚本代码 """ 某网站经常注销账号,开发一键注册脚本,写的很烂,有很多可以优化的地方 """from time import sleepfrom selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select i…

自己实现的网站

利用空余时间&#xff0c;自己用vue动手实现了一个小网站

阿里云网站备案中遇到的基本概念类问题解答

本文为介绍备案过程中涉及的基本概念类问题。这些常见问题在实际使用中会经常遇到&#xff0c;所以老魏在这里也是为了给自己留一个记录&#xff0c;以后用到的时候查看&#xff0c;同时也有分享给大家参考使用帮助的意思。 如何取消备案&#xff1f; 刚提交备案订单还未成功…

阿里云网站备案-验证备案问题解答汇总

在阿里云ICP代备案管理系统提交备案申请时&#xff0c;如出现该域名存在进行中的订单、该域名对应的主体信息在系统中已经存在等错误提示信息&#xff0c;或您想要取消进行中的备案订单&#xff0c;请参考本文进行操作。 1、错误提示&#xff1a;该域名存在进行中的订单 可能原…

动态网站在不同平台都有写什么问题!!这里给大家一些展示

目录 一、Tomcat启动失败 1、错误1 2、错误2 3、Maven模块相互依赖错误 二、Spring Mvc 1、错误1 三、项目编写过程 1、springmvc无法跳转页面404 2、Maven工程pom.xml顶头红叉无报错 3、IDEA无法使用JQuery 4、JSP的设置路径报错 5、SpringBoot查询数据报错 四、…

java web电脑网站微信扫码支付(Servlet+JSP)

上篇文章写到了app开发中的微信支付和支付宝支付连接&#xff1a;https://blog.csdn.net/qq_35318713/article/details/92832397&#xff0c; 这次再把电脑网站扫码支付的过程记录一下&#xff0c;其实原理上还是差不多&#xff0c;就是多了一个生成二维码的过程。 上代码&am…