多线程爬取小说网站——全站架构完全爬取

news/2024/5/14 0:57:27/文章来源:https://blog.csdn.net/qq_35235977/article/details/86666453

多线程爬取小说网站“全书网”
1、可爬取所有分类的文章
2、包括小说的封面、作者、介绍以及每章的内容,就是说这个小说网站架构都爬下来了。
3、本来是打算都爬下来的,后来发现我还是太年轻,一本书的内容就占了3到4M的数据库空间,爬到300多本以后才恍然大悟,要知道全站至少十几万本书。这你可以算一下要多少空间,我这小小服务器承担不起了。后来就改成先爬所有小说的封面、作者、书名、介绍以及链接。省略了章节具体内容后总共爬了15万3千多本。。。
 

具体代码如下:

# coding:utf8
#!/usr/bin/python
# -*- coding: UTF-8 -*-import requests
import pymysql
from bs4 import BeautifulSoup
import _thread
import time
import threading# 获取书简介,修改书信息
def getIntroduce(novel_href,id):header = {'Host':'www.quanshuwang.com','Upgrade-Insecure-Requests':'1','Connection':'keep-alive','Accept-Encoding':'gzip, deflate','Accept-Language':'zh-CN,zh;q=0.9','Cache-Control':'max-age=0','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}time.sleep(0.2)novellist = requests.get(novel_href,headers=header,timeout=20)novellist.encoding = 'gbk'soup = BeautifulSoup(novellist.text, 'lxml')res = soup.select("#waa")if(len(res)>0):# 书简介introduce = soup.select("#waa")[0].get_text()chapterHref = soup.select(".reader")[0].get("href")print(introduce)sql = "UPDATE novel_info SET novel_introduce='%s' WHERE novel_href='%s'" % (introduce,novel_href)te = threading.Thread(target=getChapterList, args=(chapterHref, id,sql))te.start()# getChapterList(chapterHref,id,sql)# 获取章节信息
def getChapterList(h,id,sql):db = pymysql.connect("localhost", "root", "123456", "wx_app")db.ping(True)time.sleep(0.2)novellist = requests.get(h, timeout=20)novellist.encoding = 'gbk'soup = BeautifulSoup(novellist.text, 'lxml')list = soup.select(".dirconone > li");i = 1print("开始输入-> 书ID:%d " % id)insertNovelInfo(sql,db)for chapter in list:contHref = chapter.select("a")[0].get("href")# 章节标题contTitle = chapter.select("a")[0].get_text()# content = getContents(contHref)res1 = requests.get(contHref, timeout=20)res1.encoding = 'gbk'soup = BeautifulSoup(res1.text, 'lxml')tx = soup.select(".mainContenr")if (len(tx) > 0):content = soup.select(".mainContenr")[0].get_text().lstrip('style5();').rstrip('style6();')else:content = hprint("章节:%s" % (contTitle))sql1 = "INSERT INTO `novel_chapter`(novel_id,chapter_id,chapter_name) VALUES(%d,%d,'%s')" % (id,i,contTitle)i = i+1sql2 = "INSERT INTO `novel_chapter_info`(chapter_id,chapter_name,chapter_content,novel_id) VALUES(%d,'%s','%s',%d)" % (i,contTitle,content,id)insertNovelInfo(sql1,db)insertNovelInfo(sql2,db)print("文件%s输入完成" % id)db.commit()db.close()
def getContents(h):res = requests.get(h, timeout=20)res.encoding = 'gbk'soup = BeautifulSoup(res.text, 'lxml')tx = soup.select(".mainContenr")if(len(tx)>0):content = soup.select(".mainContenr")[0].get_text().lstrip('style5();').rstrip('style6();')else:content = hreturn contentdef insertNovelInfo(sql,db):cursor = db.cursor()try:cursor.execute(sql)except:#回滚db.rollback()print("mysql错误:",sql)exec(0)# getIntroduce('http://www.quanshuwang.com/book_135083.html')def test(i):print(i)def init(count,num):# count = 0while (count < num):i = 0str = "select a.novel_href,a.novel_id from novel_info a inner join (select novel_id from novel_info GROUP BY novel_id  limit %d,1) b on a.novel_id=b.novel_id " % count# 打开数据库连接db = pymysql.connect("localhost", "root", "123456", "wx_app")db.ping(True)# 使用cursor()方法获取操作游标cursor = db.cursor()try:# 执行SQL语句cursor.execute(str)# 获取所有记录列表results = cursor.fetchall()db.close()except:print("Error: unable to fecth data")# 关闭数据库连接for row in results:getIntroduce(row[0],row[1])print(row[0],row[1])count = count + 1def test(res):i = 0;while(i<10):print(res)i = i+1try:threads = []# 循环开启线程for i in range(0, 100):# 每个线程执行多少文章j = i+1t = threading.Thread(target=init, args=(i,j))i = jthreads.append(t)t.start()for t in threads:t.join()print("end")except:print("Error: 无法启动线程")

里面的函数具体用起来要根据自己需求来组合,如有问题或者需要其它数据库资料可关注我个人微信公众号:yyjuan,发送本文链接获取相关资料

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

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

相关文章

每个 iOS 开发者都应该关注的 5 个网站

作为一名 iOS 开发者&#xff0c;我们总是想着跟上 Swift 的新特性。我们每天都会查看各种在线资源。以下是我个人关注的 5 个非常重要的网站&#xff0c;以使自己了解最新的 iOS 变化。 iOS 开发目录 无论是官方的 Apple 博客&#xff0c;还是让我们了解最新动态的社区博客………

云服务器 Ubuntu 16.04 搭建 WordPress 网站流程(三)

内容 受篇幅限制&#xff0c;本篇文章拆分为三个部分&#xff0c;及一篇快速上手指南&#xff1a; 云服务器 Ubuntu 16.04 搭建 WordPress 网站流程&#xff08;一&#xff09;云服务器 Ubuntu 16.04 搭建 WordPress 网站流程&#xff08;二&#xff09;云服务器 Ubuntu 16.0…

查看github网站所提供的api

访问如下网址&#xff1a;https://api.github.com 如图&#xff1a;

windows Server 2008 R2 搭建ASP网站疑难杂症

## 标题windows Server 2008 R2 搭建ASP网站** 首先准备环境windows Server 2008 R2 纯净镜像包 &#xff0c;为什么要用纯净镜像包&#xff0c;一为了防止后门 &#xff0c;二是为了安装配置网站方便 这里给大家准备了windows Server 2008 R2 搭建ASP网站的迅雷下载地址 ed2k:…

保姆级静态网站搭建-阿里云实践

1首先在阿里云登录或者注册账号&#xff0c;学生可以认证有优惠 2选择自己需求去选云服务器 3更换操作系统为LINUX 在控制台里打开云ecs服务器的实例&#xff0c;点击操作中的更多的实例状态的停止 然后在更多中选择云盘和镜像中的更换操作系统&#xff0c;确认更换操作系统&a…

英文书籍下载常用网站

经常需要找一些科技文献&#xff0c;以及最新的科技书籍&#xff0c;所以收集了一些无需注册并且免费下载无需积分的网站。 libgen.io 这个网站上面的书籍比较多&#xff0c;可以下到很多最新的书籍&#xff0c;还可以下到一些研究领域里面的顶级的会议的论文集&#xff0c;比…

web-前端之事件冒泡,其中包括(onmousemove,onmouseover,onmouseout,onmouseleave,onmouseup,onmouseentter)可用于一些计数小游戏

这个是专门写了几个鼠标事件&#xff0c;其中很清晰的描述了每一个鼠标事件的发生和结束&#xff0c;可以很清楚的看见每一种事件的变化 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>div{…

web-滚动条事件,明确来说就是一些网站上的滚动条滚动到某一个位置才会出现你想看到的东西

这个滚动事件&#xff0c;就好像是淘宝&#xff0c;京东上的一样&#xff0c;它们左边的区块会有某些产品的介绍&#xff0c;所以这时就需要滚动条事件&#xff0c;就是为了用户的便利而设置的该在这个界面的那个地方显示对产品的介绍&#xff0c;不懂的可以看下图 <!DOCT…

计算机学习常用网站总结

视频类网站 1.慕课网 慕课网上有很多免费的视频课程&#xff0c;在里面可以学到很多跟开发、游戏制作、计算机基础等课程。资源非常丰富&#xff0c;涵盖的课程非常广&#xff0c;是学习的极佳的课程&#xff0c;并且里面的课程经常更新&#xff0c;强力推荐。 在考研前&…

130 个相见恨晚的超实用网站,一次性分享出来

转载至&#xff1a;CSDN博主「爪白白」 原文链接&#xff1a;https://blog.csdn.net/qq_43901693/article/details/100606828 文章目录 搞学习找书籍冷知识 / 黑科技写代码资源搜索小工具导航页&#xff08;工具集&#xff09;看视频学设计搞文档找图片 搞学习 CSDN&#xff1…

阿里云Linux(Debian) + Tomcat搭建网站

工具&#xff1a; Linux(我买的是阿里云的主机Linux(Debian64位的)) Tomcat(Java Web服务器) putty(连接远程主机的客户端) WinSCP(远程主机的可视化界面&#xff0c;方便操作文件) jdk1.8(需要配置环境变量) (注意&#xff01;&#xff01;&#xff01;我的主机是Linux64位的…

国人当自强:两岸三地在线编程学习网站大搜罗

说到国内的在线编程学习网站&#xff0c;很多人都是一脸茫然&#xff0c;即使是资深开发者也是如此。在许多人眼中&#xff0c;尽管国内App开发景象一派繁荣&#xff0c;但教育疲软却是不争的事实。在《移动开发者的自学宝典&#xff1a;十大在线编程学习网站》之后&#xff0c…

数据分析学习网站

数据分析学习网站 在线分析工具 神策 https://www.sensorsdata.cn/易分析 <http://www.yeefx.com/index.html>易观方舟 https://ark.analysys.cn/portal/ 学习网站&#xff1a; 数据分析网 https://www.afenxi.com/ 如何通过数据进行网站分析 网站的监测指标有很多&a…

炒股经常用到的几个工具网站

俗话说&#xff0c;工欲善其事&#xff0c;必先利其器。想在这个坑爹的金融市场寻找致富的圣杯&#xff0c;除了掌握基础的金融知识外&#xff0c;你还需要一些掘金取宝的武器装备---金融资讯网站或者软件。我在每天的夜报里都会列举一些数据&#xff0c;很多朋友都问我数据来源…

052CSS-网站图标favicon.ico

favicon.ico一般勇于作为缩略的网站图标&#xff0c;他先是在浏览器的地址栏或者标签上【制作png、转化ico、放在根目录、引入】 通过比特虫网站转换http://www.bitbug.net/引入规范、放在head里<link rel"shortcut icon" href"favicon.ico" type"…

108Express-创建网站服务器、send()、中间件next()use()、错误处理中间键、路由

创建网站服务器 const express require(express); const app express();send&#xff08;&#xff09;替代res.end&#xff08;&#xff09; // 1send会检测内部响应内容的类型 自动设置到响应头中 // 2会自动设置http状态码 // 3会自动设置响应的内容类型及编码app.get(/,…

一些的GNSS 产品和数据下载网站

CDDIS: https://cddis.nasa.gov/archive/gnss/data/ 缺点&#xff1a;需要注册&#xff0c;批量下载麻烦&#xff0c;而且现在国内需要挂VPN IGN: ftp://igs.ign.fr GFZ:ftp://ftp.gfz-potsdam.de/GNSS/ UCSD: ftp://garner.ucsd.edu/ BKG:ftp://igs.bkg.bund.de/ 这里面也…

基于Hibernate+spring的公司网站打造中(-)

公司网站改版&#xff0c;领导决定用Hibernatespring。&#xff08;以前是用.net作的&#xff09;这千斤重担毫不留情的落在了我这个.net程序员身上&#xff01;为此&#xff0c;五一假期。。。还好&#xff0c;在美工的大力帮助下。首页已基本成形。以后会为大家介绍环境的搭建…

基于Hibernate+spring的公司网站打造中(三)

以下三个xml文件是必须的.WebContent/WEB-INF/applicationContext.xmlWebContent/WEB-INF/test-servlet.xmlWebContent/WEB-INF/web.xml相关说明在以下xml文件中列出 applicationContext.xml <?xml version"1.0" encoding"UTF-8"?><!DOCTYPE be…

从权威网站上“偷”窃

权威网站的设计都是有其可学之处的&#xff0c;如果有时间不防看看它们的源代码&#xff08;HTML代码&#xff09;。至少可以学到这些吧&#xff1a;1。页面布局风格&#xff1b;2。Javascript代码&#xff0c;CSS原码&#xff1b;2。CSS,Javascript脚本联合操纵Dom&#xff1b…