Python爬虫入门教程: All IT eBooks多线程爬取!

Python爬虫入门教程 14-100 All IT eBooks多线程爬取 python3入门教程,All It eBooks网站多线程爬取,可以快速的通过使用requests_html 和 queue模块爬取你想要的PDF书籍 阅读详情

1.All IT eBooks多线程-写在前面

对一个爬虫爱好者来说,或多或少都有这么一点点的 收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来。 然后放着,是的,就这么放着.......然后慢慢的遗忘掉.....

All IT eBooks多线程-爬虫分析

打开网址 http://www.allitebooks.com/ 发现特别清晰的小页面,一看就好爬

 

 

 

Python资源共享群:626017123

在点击一本图书进入,发现下载的小链接也很明显的展示在了我们面前,小激动一把,这么清晰无广告的网站不多见了。

 

 

 

 

All IT eBooks多线程-撸代码

这次我采用了一个新的模块 requests-html 这个模块的作者之前开发了一款 requests ,你应该非常熟悉了,线程控制采用的 queue

安装 requests-html 模块

pip install requests-html
复制代码

关于这个模块的使用,你只需要使用搜索引擎搜索一下这个模块名称,那文章也是很多滴,作为能学到这篇博客的你来说,是很简单的拉~

我们编写一下核心的内容

from requests_html import HTMLSession
from queue import Queue
import requests
import random
import threading
CARWL_EXIT = False
DOWN_EXIT = False
#####
# 其他代码
####
if __name__ == '__main__':
    page_queue = Queue(5)
    for i in range(1,6):
        page_queue.put(i)  # 把页码存储到page_queue里面
    # 采集结果
    data_queue = Queue()
    # 记录线程列表
    thread_crawl = []
    # 每次开启5个线程
    craw_list = ["采集线程1号","采集线程2号","采集线程3号","采集线程4号","采集线程5号"]
    for thread_name in craw_list:
        c_thread = ThreadCrawl(thread_name,page_queue,data_queue)
        c_thread.start()
        thread_crawl.append(c_thread)
    while not page_queue.empty():
        pass
    # 如果page_queue为空,采集线程退出循环
    CARWL_EXIT = True
    for thread in thread_crawl:
        thread.join()
        print("抓取线程结束")复制代码

上面就是爬取图书详情页面的线程了,我开启了5个线程爬取,页码也只爬取了 5 页,如果你需要更多的,只需要修改

page_queue = Queue(5)
    for i in range(1,6):
        page_queue.put(i)  # 把页码存储到page_queue里面复制代码

下面我们把 ThreadCrawl 类编写完毕

session = HTMLSession()
# 这个地方是 User_Agents 以后我把他配置到服务器上面,就可以远程获取了  这个列表里面有很多项,你自己去源码里面找吧
USER_AGENTS = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20"
]
# 获取图书下载链接的线程类
class ThreadCrawl(threading.Thread):
    # 构造函数
    def __init__(self,thread_name,page_queue,data_queue):
        super(ThreadCrawl,self).__init__()
        self.thread_name = thread_name
        self.page_queue = page_queue
        self.data_queue = data_queue
        self.page_url = "http://www.allitebooks.com/page/{}"   #URL拼接模板
    def run(self):
        print(self.thread_name+" 启动*********")
        while not CARWL_EXIT:
            try:
                page = self.page_queue.get(block=False)
                page_url = self.page_url.format(page)   # 拼接URL操作
                self.get_list(page_url)   # 分析页面链接 
            except Exception as e:
                print(e)
                break
    # 获取当前列表页所有图书链接
    def get_list(self,url):
        try:
            response = session.get(url)
        except Exception as e:
            print(e)
            raise e
        all_link = response.html.find('.entry-title>a') # 获取页面所有图书详情链接
        for link in all_link:
            self.get_book_url(link.attrs['href'])   # 获取图书链接
    # 获取图书下载链接
    def get_book_url(self,url):
        try:
            response = session.get(url)
        except Exception as e:
            print(e)
            raise e
        download_url = response.html.find('.download-links a', first=True)
        if download_url is not None: # 如果下载链接存在,那么继续下面的爬取工作
            link = download_url.attrs['href']
            self.data_queue.put(link)   # 把图书下载地址 存储到 data_queue里面,准备后面的下载
            print("抓取到{}".format(link))复制代码

上述代码一个非常重要的内容就是把图书的 下载链接 存储到了 data_queue 里面,这些数据 在另一个下载线程里面是最基本的数据。

下面开始 编写图书下载的类和方法。

我开启了4个线程,操作和上面的非常类似

class ThreadDown(threading.Thread):
    def __init__(self, thread_name, data_queue):
        super(ThreadDown, self).__init__()
        self.thread_name = thread_name
        self.data_queue = data_queue
    def run(self):
        print(self.thread_name + ' 启动************')
        while not DOWN_EXIT:
            try:
                book_link = self.data_queue.get(block=False)
                self.download(book_link)
            except Exception as e:
                pass
    def download(self,url):
        # 随机浏览器User-Agent
        headers = {"User-Agent":random.choice(USER_AGENTS)}
        # 获取文件名字
        filename = url.split('/')[-1]
        # 如果url里面包含pdf
        if '.pdf' in url or '.epub' in url:
            file = 'book/'+filename  # 文件路径已经写死,请在跟目录先创建好一个book文件夹
            with open(file,'wb') as f:  # 开始二进制写文件
                print("正在下载 {}".format(filename))
                response = requests.get(url,stream=True,headers=headers)
                # 获取文件大小
                totle_length = response.headers.get("content-length")
                # 如果文件大小不存在,则直接写入返回的文本
                if totle_length is None:
                    f.write(response.content)
                else:
                    for data in response.iter_content(chunk_size=4096):
                        f.write(data)
                    else:
                        f.close()
                print("{}下载完成".format(filename))
if __name__ == '__main__': 
# 其他代码在上面
    thread_image = []
    image_list = ['下载线程1号', '下载线程2号', '下载线程3号', '下载线程4号']
    for thread_name in image_list:
        d_thread = ThreadDown(thread_name, data_queue)
        d_thread.start()
        thread_image.append(d_thread)
    while not data_queue.empty():
        pass
    DOWN_EXIT = True
    for thread in thread_image:
        thread.join()
        print("下载线程结束")复制代码

如果你把我上面的代码都组合完毕,那么应该可以很快速的去爬取图书了,当然这些图书都是英文了,下载下来你能不能读....... 我就不知道了。

 

 

 

webcrowler-allitbooks:webcrowler fer从allitbooks网站获取所有书籍 网络群众书 webcrowler fer从allitbooks网站获取所有书籍 pdfutils 要安装pdfutils,您必须先安装libpoppler-glib 须藤apt-get install libpoppler-glib-dev libpoppler-glib8 libcairo2-dev libcairo2 立即下载

相关推荐

AngularJS权威指南.pdf(ng-book.pdf )

学习AngularJS的权威资料,仅供学习试读,请购买正版图书。

推荐3个计算机专业的英文电子书下载网站

1、All IT eBooks :http://www.allitebooks.com 2、Free Pdf Books:http://freepdf-books.com 3、Ebook-dl:http://ebook-dl.com 亲自测试过上面的网站确实是可以免费下载

ym62033的博客 5703

PracticalProgramming2ndEditionFreePdfBook.pdf 英文原版

Practical Programming 2nd Edition – FreePdfBook

探索知识的无尽宝藏:AlliteBooks - 全球电子书搜索引擎

探索知识的无尽宝藏:AlliteBooks - 全球电子书搜索引擎 去发现同类优质开源项目:https://gitcode.com/ 项目简介 是一个开源项目,旨在构建一个全球性的电子书搜索引擎。它允许用户轻松地搜索并找到各种在线可获取的免费电子书资源,涵盖了从计算机科学、工程到文学、历史等多个领域。通过这个平台,你可以一站式访问多个书籍分享网站和存储库,为你的学习和研究提供便捷。 技术分析 ...

gitblog_00024的博客 595

Python_for_Everyone.pdf.pdf

Python_for_Everyone.pdf

ESP32-C5硬件设计全链路指南:ADC/SDIO/USB/RF PCB实战

模数转换器(ADC)和高速外设接口是嵌入式系统硬件设计的核心基础。理解ADC通道映射、输入阻抗特性与抗干扰布线,是保障传感器采样精度的前提;掌握SDIO、USB差分信号的阻抗控制、端接策略与电源去耦方法,则直接决定通信可靠性与EMC性能。在Wi-Fi 6/Bluetooth 5.3双模SoC如ESP32-C5中,ADC复用约束、USB与SDIO管脚冲突、RF匹配网络调校、四层板叠层规划等工程细节,共同构成高成功率PCB落地的关键技术栈。本文聚焦ESP32-C5平台,系统梳理从模拟前端到射频输出的硬件设计规范

weixin_35756130的博客 345

爬取allitebooks网站的电子书下载链接

allitebooks网址是目前为止还在更新的不多几个电子书免费下载网站。之前一直访问的http://it-ebooks.info由于版权原因已经去掉了全部的下载链接,转型为电子书导购网站。趁着还能访问,先把allitebooks的电子书都下载下来吧。搜索了一下已经有人写了python的爬虫抓取allitebooks的下载链接,太好了拿过来直接用。 网站的结构非常简单,共两个级别: 1)第一级...

redwingz的博客 4099

Python爬虫实战:逆向解析央视频加密参数(附完整代码)

本文详细解析了央视频加密体系的技术实现,通过Python逆向工程实战演示如何解密动态密钥、AES加密和自定义哈希算法等核心组件。文章提供完整代码示例,涵盖GUID生成、参数构造和异步请求处理,帮助开发者掌握现代视频平台的反爬机制破解方法。

weixin_42532473的博客 1130

对话即代码:用编译时优化彻底解决AI文档格式混乱问题

在AI辅助办公日益普及的今天,如何将对话产出高效转化为规范文档成为关键挑战。从编译原理视角审视AI写作链路,对话指令可视为源代码,AI输出为中间码,最终Word文档即目标程序。通过引入Schema结构约束、统一标记语言、占位符隔离动态数据等编译时优化策略,能在源头解决格式混乱、层级跳跃、表格失控等文档生成顽疾。WordBuddy与AI导出鸭等工具分别承担编译前端与代码生成后端角色,让“对话即代码”从理念落地为可操作的工作流。该方案适用于产品经理、内容创作者及团队文档标准化场景,显著提升批量产出效率,将文档生

weixin_34275734的博客 367

mysql9.0windows安装

将这里的位置修改为你刚刚创建并复制data目录的地址即可,win11的系统使用vscode修改之后,会让你确认开启更高权限以进行保存,比较方便,window10不需要确认,修改后可以直接保存。:在修改之前,最好将下图文件进行备份,将原始的文件保存好一份,以防更改了配置之后,导致mysql服务报错,无法启动,备份好的话直接将有问题的配置文件给替换就可以,无需重新安装一次mySql。双击下载的msi文件进行安装。安装有问题的,可以直接进行卸载,新本的mySql会将注册表中的数据自动进行清除,还是很方便的。

m0_74824123的博客 6447

别再搞混了!MATLAB通信仿真中EbN0转SNR的保姆级公式推导与避坑指南

本文深入解析MATLAB通信仿真中EbN0与SNR转换的核心公式,揭示数字仿真与理论系统的关键差异。通过真实案例展示错误参数设置导致的隐蔽问题,并提供完整的参数自查清单和正确实现代码,帮助工程师和学生避免常见错误,确保仿真结果准确可靠。

weixin_28746223的博客 348

177本Python最新版国外电子书分享(上)

一、图书名称: Python For Dummies.pdf MySQL ConnectorPython Revealed.pdf Learn Raspberry Pi Programming with Python, 2nd Edition.pdf Instant Pygame for Python Game Development How-to.pdf Python Graphics...

数据饕餮 2841

Aduino 通过I2C接口读取MPU6050模块数据

Aduino ESP9266通过I2C接口读取MPU6050模块数据 MPU6050模块 原理图 所需库:Adafruit_MPU6050 Adafruit_BusIO Adafruit Unified Sensor 接线示意图 ESP8266---MPU6050 VCC -- 3.3v GND -- GND D2 -- SDA D1 -- SCL 示例程序代码 #include <Adafruit_MPU6050.h> #include <Adafruit

perseverance51博客 621

Python爬虫入门【13】:All IT eBooks多线程爬取

All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来。 然后放着,是的,就这么放着…然后慢慢的遗忘掉… All IT eBooks多线程爬取-爬虫分析 打开网址 http://www.allitebooks.com/ 发现特别清晰的小页面,一看就好爬 在点击一...

Python8年程序员教程分享 192

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 706

RK3588 实战级 YOLOv5 Android 全解析:NPU 量化 + 多线程 + 跟踪算法,源码一次买齐

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

FJN110的博客 157

Python爬虫入门教程: All IT eBooks多线程爬取

All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来。 然后放着,是的,就这么放着.......然后慢慢的遗忘掉..... All IT eBooks多线程爬取-爬虫分析 打开网址http://www.allitebooks.com/发现特...

dau65166的博客 209

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1310

Python爬虫入门教程【13】:All IT eBooks多线程爬取

All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来。 然后放着,是的,就这么放着…然后慢慢的遗忘掉… All IT eBooks多线程爬取-爬虫分析 打开网址 http://www.allitebooks.com/ 发现特别清晰的小页面,一看就好爬 在点击一...

Python追梦 234

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Python】All IT eBooks多线程爬取

All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来。 然后放着,是的,就这么放着…然后慢慢的遗忘掉… All IT eBooks多线程爬取-爬虫分析 打开网址 http://www.allitebooks.com/ 发现特别清晰的小页面,一看就好爬 在点击一...

Python追梦 152

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python爬取下载链接的文件,python爬取网页详细教程

这几日和朋友搜索东西的时候无意间发现了一个国外的存有大量PDF格式电子书的网站。其实我相当奇怪在国外版权管控如此严的环境下这个网站是如何拿到这么多电子书的,而且全是正版样式的PDF,目录索引一应俱全,没有任何影印和扫描的版本。今天要做的事情就是爬取这个网站上面PDF的下载链接了。

2301_81900494的博客 1489

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python爬虫入门教程第10讲_Python爬虫入门教程第十四讲: All IT eBooks多

All IT eBooks多线程爬取-写在前面对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来。 然后放着,是的,就这么放着.......然后慢慢的遗忘掉.....imageAll IT eBooks多线程爬取-爬虫分析打开网址 http://www.allitebooks.com/ 发现特别清晰的小页面,...

weixin_39700625的博客 142
上一篇: Python数据分析实战基础 | 初识Pandas !
下一篇: 我在 GitHub 上都见过哪些沙雕项目?
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值