利用Python 多协程和队列爬取豆瓣图书

Python爬虫实战:使用Scrapy与异步技术高效爬取豆瓣读书数据 本文将详细介绍如何使用Python最新爬虫技术构建一个高效的豆瓣读书数据采集系统。我们将从基础的HTTP请求开始,逐步深入到Scrapy框架的应用,最后展示如何使用异步技术(aiohttp+asyncio)实现高性能爬取。文章包含完整的代码实现、反反爬策略、数据存储方案以及性能优化技巧,旨在为读者提供一套完整的爬虫解决方案。关键词:Python爬虫、Scrapy、异步爬虫、豆瓣读书、数据采集python复制下载。 阅读详情

基本思路

  • 了解豆瓣图书网页结构
  • 导入相关模块包gevent、request、BeautifulSoup、csv
  • 使用monkey.patch_all()方法变成协作式运行
  • 利用request获取网页响应内容
  • 利用BeautifulSoup解析网页内容,并提取所需的标签内容
  • 创建队列对象,利用队列相应的方法,创建多任务执行
  • 保存为CSV文件格式
  • 很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:961562169

爬取豆瓣图书

在这里插入图片描述

利用多协程和队列,来爬取豆瓣图书Top250(书名,作者,评分)并存储csv 豆瓣图书:https://book.douban.com/top250?start=0

爬虫主程序

import csv
from gevent.queue import Queue
import requests
import time
from bs4 import BeautifulSoup
import gevent
from gevent import monkey
# monkey.patch_all()能把程序变成协作式运行,就是可以帮助程序实现异步,注意需放在最前面
monkey.patch_all()

# 计算开始时间
start_time = time.time()
# 伪装请求头
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                        'Chrome/78.0.3904.108 Safari/537.36'}
url_list = []  # 用于存放URL链接
# 使用for循环生产不同的链接,并存放在url_list
for i in range(0, 250, 25):
    link = 'https://book.douban.com/top250?start=' + str(i)
    url_list.append(link)
# 创建队列对象,并赋值给work
work = Queue()
# 用put_nowait()函数可以把网址都放进队列里。
for url in url_list:
    work.put_nowait(url)
# 创建一个新的csv文件用于存放需要提前的数据
book = open('book_info.csv', 'w', newline='', encoding='utf-8')
# 创建列名
column_title = ['书名', '作者', '评分', '链接']
writer = csv.writer(book)
# 写入字段的列名
writer.writerow(column_title)
# 创建一个新的列表,然后把相应信息存放到列表中
book_info = []

# 构建一个获取书籍信息的函数


def get_info():
    # 判断队列是否为空并作为循环的条件
    while not work.empty():
        # 获取url
        url = work.get_nowait()
        # 获取网页的响应内容
        res = requests.get(url, headers=header)
        # 使用BeautifulSoup进行解析提取数据
        soup = BeautifulSoup(res.text, 'html.parser')
        book_title = soup.find_all('div', class_='pl2')
        book_writer = soup.find_all('p', class_="pl")
        book_rating_nums = soup.find_all('span', class_="rating_nums")
        # 赋予book_info为全局变量
        global book_info
        for j in range(len(book_title)):
            a = book_title[j].a['title']  # 书名
            b = book_writer[j].text.strip()  # 作者
            c = book_rating_nums[j].text.strip()  # 评分
            d = book_title[j].a['href']  # 书籍链接
            # 写入到CSV文件中
            writer.writerow([a, b, c, d])
            # 添加到book_info列表
            book_info.append([a, b, c, d])
        # 查看链接、队列大小、网页响应状态
        print(url, work.qsize(), res.status_code)


# 创建空任务列表
task_list = []
# 相当于创建3个任务
for k in range(3):
    # 用gevent.spawn()函数创建执行crawler()函数的任务
    task = gevent.spawn(get_info)
    # 往任务列表添加任务
    task_list.append(task)
# 用gevent.joinall方法,执行任务列表里的所有任务,就是让爬虫开始爬取网站
gevent.joinall(task_list)
# print(book_info)
# 统计执行结束时间
end = time.time()
print(end - start_time)
# 关闭文件
book.close()

https://book.douban.com/top250?start=0 7 200
https://book.douban.com/top250?start=25 6 200
https://book.douban.com/top250?start=50 5 200
https://book.douban.com/top250?start=125 4 200
https://book.douban.com/top250?start=100 3 200
https://book.douban.com/top250?start=75 2 200
https://book.douban.com/top250?start=150 1 200
https://book.douban.com/top250?start=200 0 200
https://book.douban.com/top250?start=175 0 200
https://book.douban.com/top250?start=225 0 200
2.852992057800293

运行结果

在这里插入图片描述

Python爬虫实战:使用Scrapy+Playwright动态爬取豆瓣读书评分数据 本文将详细介绍如何使用Python最新技术栈(Scrapy框架+Playwright浏览器自动化)来爬取豆瓣读书的评分数据。我们将从环境配置开始,逐步讲解爬虫的构建过程,包括反爬策略应对、数据清洗存储以及性能优化等内容。本文提供完整可运行的代码示例,适合中高级Python开发者学习现代网页爬取技术。Scrapy:一个快速、高层次的Python网络爬虫框架,用于抓取网站并提取结构化数据Playwright:微软开源的现代化浏览器自动化工具,支持Chromium、Firefox和WebKit。 阅读详情

相关推荐

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 198

Python爬虫实战项目 ----- 多线程爬取豆瓣热评较多的电影名称和热评词云

话不多说,先上效果图 import re import requests import jieba import wordcloud from lxml import etree import matplotlib import numpy as np import matplotlib.pyplot as plt import threading import time #多线程爬取豆瓣热评较多的电影名称和热评词云 #matplotlib.rcParams['font.sans-serif.

henuyl的博客 1205

MyEclipse 2017 CI 10安装与激活

本文介绍MyEclipse 2017 CI 7、CI 8、CI 9和CI 10的安装与激活。此方法理论上应该能激活MyEclipse 2017 CI所有系列,即激活方法是通用的,只是激活文件略有不同。本文提供MyEclipse 2017 CI 7、CI 8、CI 9和CI 10的激活文件。说明:博主所提供的压缩包格式均为RAR5,即WinRAR 5.0以上的版本才能正常解压,别的压缩软件博主不太清...

weixin_42539046的博客 9416

Python协程学习--爬取一本网络小说

协程爬取 最近在学习Python爬虫,同时在公司同事的引导下接触到协程,开始学习使用协程编写异步爬虫 Python协程系列学习参考:https://blog.youkuaiyun.com/qq_27825451/article/details/86218230 目标:爬取一本网络小说 主站url url = 'http://www.quanshuwang.com/book/9/9055' 爬取流程分析:...

Peng的博客 1021

告别迷茫!用C#和Windows.Devices.Bluetooth搞定BLE设备连接与数据收发(附完整代码)

本文详细介绍了如何使用C#和Windows.Devices.Bluetooth命名空间实现BLE设备连接与数据收发。从开发环境配置到设备扫描、服务发现、数据通信及资源管理,提供完整代码示例和实战技巧,帮助开发者快速掌握低功耗蓝牙开发,解决连接稳定性和异常处理等常见问题。

weixin_29248653的博客 505

STC32G电调调试血泪史:从TPH1R403NL MOS管烧毁到PWM信号异常排查全记录

本文详细记录了STC32G无刷电调调试过程中的常见问题与解决方案,包括MOS管烧毁、PWM信号异常等关键故障排查。通过电源系统检测、驱动电路验证及三相平衡调试等实战经验,帮助硬件爱好者快速定位问题,提升电调调试效率。特别针对TPH1R403NL等MOS管的保护措施进行了重点分析。

weixin_33736048的博客 551

Python分别用单线程,多线程,异步协程爬取一部小说,最快仅需要5s

文章目录单线程爬取多线程爬取异步协程爬取 本文运用了三种方式爬取一整部小说,分别运用了单线程爬取,多线程爬取和异步协程爬取。 小说网址:` http://www.doupo321.com/doupocangqiong/` 网页很简单,也不用过多分析,内容都在网页源代码中,就是一个多级链接爬虫,步骤就是先爬取到网页下的子链接,然后通过子链接爬取到每章小说内容。 因为这个网页的源代码都很规整,所有我们用xpath来匹配,当然你熟悉正则或者bs4也可以用bs4来匹配。然后我们就开始写代码吧。 单线程爬取 # @

qq_55977554的博客 2598

损失函数大汇总(四十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的边界优化损失函数,特别适用于小目标、细长结构和类别不平衡场景。它通过引入真实边界的有符号距离场(SDF),将边界距离优化问题转化为区域积分形式。与Dice Loss等区域重叠损失不同,Boundary Loss更关注预测边界与真实边界的精确对齐,而非整体区域重叠。其核心公式为像素级SDF值与预测概率的乘积求和,通过梯度调整使预测概率在真实边界内部升高、外部降低。该损失通常与区域型损失(如CE或Dice)联合使用,形成"区域分割+边界修正&qu

悦学共鸣,温柔以待,汇聚光芒,共同成长 354

python中data.find_all爬取网站为空列表_利用Python 多协程和队列爬取豆瓣图书

基本思路了解豆瓣图书网页结构导入相关模块包gevent、request、BeautifulSoup、csv使用monkey.patch_all()方法变成协作式运行利用request获取网页响应内容利用BeautifulSoup解析网页内容,并提取所需的标签内容创建队列对象,利用队列相应的方法,创建多任务执行保存为CSV文件格式点击此处,获取海量Python学习资料!爬取豆瓣图书​利用多协程和队列...

weixin_39939276的博客 242

还在用 RaiDrive/Rclone 挂载网盘?教您使用Windows 原生 WebDAV 丝滑直连 AList/Openlist,让你的网盘秒变本地硬盘!

网盘文件分散管理?😩 别再依赖第三方工具了!本文教你如何在 Windows 下,利用原生 WebDAV 功能,将 Openlist 网盘直接映射为本地硬盘!💻 操作简单,告别繁琐,让你的云端文件像本地文件一样丝滑!🚀 轻松实现高效管理,快来体验吧!

XiaoqiangClub的博客 2974

数据科学助力大数据领域的航空安全分析

随着航空业的快速发展,航班数量不断增加,航空安全问题日益受到关注。大数据时代的到来,使得航空领域积累了大量的数据,包括飞行数据、维护数据、气象数据等。本文章的目的在于探讨如何运用数据科学的方法和技术,对这些大数据进行分析,以提高航空安全水平。范围涵盖了从数据收集、预处理到数据分析、模型构建和应用的整个流程。本文将按照以下结构进行组织:首先介绍数据科学和航空安全分析的核心概念以及它们之间的联系;接着阐述核心算法原理和具体操作步骤,并使用Python源代码进行详细说明;

软件工程实践的博客 1292

python爬虫--多协程

本文所有皆为单核CPU情况,多进程(多核CPU)有待学习 1.爬取任务量较小时 from gevent import monkey #从gevent库里导入monkey模块。 monkey.patch_all() #monkey.patch_all()能把程序变成协作式运行,就是可以帮助程序实现异步。 import gevent import time import requests #导入gevent、time、requests。 start = time.time() #记录程序开始时间。 url_

weixin_45503497的博客 353

06 - 深度学习处理器原理

深度学习处理器的重要性在于它们可以加速深度学习任务的执行,从而推动了人工智能的发展。传统的通用处理器虽然可以执行深度学习任务,但它们不够高效,需要消耗大量的能量和时间。深度学习处理器通过硬件加速和特定设计来优化深度学习任务的执行,从而可以提高执行效率、降低能耗和加速训练和推断过程。 深度学习处理器的发展也推动了深度学习算法的创新,因为算法的发展需要硬件的支持和驱动。同时,深度学习处理器的出现也促进了更广泛的应用场景,包括自动驾驶、人脸识别、语音识别、图像识别等领域。因此,深度学习处理器的重要性不仅在于加速

m0_51339444的博客 752

python爬虫——使用代理和xpath爬取豆瓣读书

根据豆瓣读书的所有标签自动创建文件夹,使用代理防止被反爬。但是我的代理好像是假的,还是被反爬了…通过设置cookie爬取,但是爬取一定数量后需要在浏览器手动进行验证码输入…总的来说,代码写的很麻烦 import requests from lxml import etree from fake_useragent import UserAgent import threading import q...

小爬虫的博客 950

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

协程爬取整站豆瓣网络

爬取豆瓣网络思路:从标签页进入,提取所有标签URL进入每个标签页,提取所有列表URL进入每个列表页,提取每一页的详情URL和下一页列表URL进入每个详情页,拿到书名如此往复循环,直到数据抓取完毕# coding: utf8 from gevent import monkey monkey.patch_all() #用于随机获取请求头,用法random.choice(list),会从列表中随机取出...

wangde0703的博客 420

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Python多线程爬虫初探—爬取豆瓣图书 top250

Python多线程爬虫初探—爬取豆瓣图书 top250 最近正在自学python爬虫方面的相关知识,学习到了如何使用python的urllib库进行网络爬虫,然后最近看到了多线程爬虫,于是自己也写了个小爬虫试了试多线程爬虫,把豆瓣图书top250爬了下来(这大概是新手入门最常爬的吧2333) 首先多线程简单理解就是在一个进程中同时执行多个任务,这样可以达到加快程序的运行速度的功能。 下面是代码部分...

qq_43373434的博客 797

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

豆瓣图书爬取并进行评论的特征提取

1.运用python爬虫爬取和数据库的持久化存储 2.学会TF-IDF方法进行特征提取 一、scrapy爬虫框架介绍 · Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛 · 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便 制作 Scrapy 爬虫 一共需要4步: 1.新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 2.明确目标 (编写items.py):明确

Phoebus2617的博客 1980

利用多协程和队列,来爬取豆瓣图书Top250(书名,作者,评分)并存储csv

记录一下 自己的爬虫 学习历史! from gevent import monkey monkey.patch_all() import time import gevent from gevent.queue import Queue import requests from bs4 import BeautifulSoup import csv #利用多协程和队列,来爬取豆瓣图书Top250(书名,作者,评分)并存储csv csv_file = open('books.csv','w',newlin

lqgood的博客 395

用python爬虫框架Scrapy来完成一个小项目

文章目录前言1.什么是Scrapy 前言 作为一个爬虫的老手了,不知道大家有没有一种感觉:要写出一个完整的爬虫程序需要做很多琐碎的工作。比如,要针对不同的网站制定不同的解析方式;要导入不同功能的模块;还要编写各种爬取流程的代码。我们在日常工作中会使用PPT模板来制作PPT。那么有没有一个现成的爬虫模板,让我们能够改之即用,也就是说对这个模板进行适当的修改,就能完成一个爬虫项目的开发呢? 那就让我们来一起学习一下Scrapy这个nb的框架 (只要认真学,绝对能搞懂) 1.什么是Scrapy 在学习pytho

有学习问题可以加我qq群:785318982,群内有大佬免费答疑 1587

基于Python的豆瓣图书数据分析与可视化系统【自动采集、海量数据集、多维度分析、机器学习】

摘要: 豆瓣图书数据智能分析系统通过自动化爬虫技术获取图书数据,克服了平台反爬机制,采用动态请求头、Cookies持久化、自适应休眠等策略确保采集稳定性。系统提取30余个字段信息,构建多维分析体系,包括评分、价格、评价等维度,并开发丰富可视化图表。基于机器学习模型,系统可预测图书价格,为读者、出版商和研究提供市场洞察。项目特色包括智能爬虫、全维度分析和预测应用,具有广泛的市场价值。

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 2079

python实例豆瓣音乐代码_扫描"豆瓣音乐"所有专辑的简单Python脚本

我需要一些音乐数据,而豆瓣音乐上相关数据是非常齐全的。即使是十分小众、鲜有人听过的专辑,豆瓣也提供了较为详细的描述。摆在我面前的第一个问题是,如何将豆瓣音乐上的专辑一网打尽,一个不遗漏地抓取到。看到subject后跟着一串数字ID,这时候一个简单的思路已经出来了:将id从1不断递增,扫描完所有的ID,检查哪些ID是存在的又观察到大多数专辑页面上存在相关推荐,也就是那个“喜欢某某专辑的人也喜欢…...

weixin_39777497的博客 140

基于Python爬虫的豆瓣书籍数据分析和可视化

摘要:本系统是基于Python技术栈的书籍数据分析平台,采用Flask+Dash框架实现前后端分离。系统包含数据采集(Scrapy爬虫)、处理(Pandas)、存储(MySQL/MongoDB)和可视化展示(Plotly)全流程功能,可分析豆瓣10万+书籍的评分、评论等数据。核心功能包括多维度数据分析、交互式可视化仪表板(支持评分分布、市场份额等图表)、自动增量更新和数据导出。适用于读者选书参考、出版行业分析等场景,具有响应式设计、多终端适配等技术特点。系统采用模块化架构,每日自动更新数据,支持自定义分析和

2501_93059031的博客 824

【Scrapy】基于scrapy的豆瓣阅读top250爬虫

Hello,这是我的第一篇博客,很久以前就开始学习爬虫了,不过处于反爬手段的策略,再加上之前的公司一直没有要求用scrapy,导致一直没有认真学习scrapy框架。现在有时间了,打算好好学一下这个框架。这篇博客是基于scrapy的豆瓣top250爬虫,以前是有写过top250电影的爬虫的。不过没用scrapy。。废话不多说,开始吧!!

buke 1530

基于scrapy架构的miniScrapy实现爬取豆瓣电影top250

miniScrapyScrapy的架构miniSrcapy实例代码: Scrapy的架构 参考链接:https://www.cnblogs.com/miaoning/p/11626563.html miniSrcapy实例代码: import requests import json from lxml import etree from queue import Queue import threading class CrawlThread(threading.Thread): """

Galen_xia的博客 2194
上一篇: 利用Python分析文章词频,并生成词云图
下一篇: 基于 Python 的 tkinter 模块制作的名人名言查询工具
Python_sn
博客等级 码龄6年 324粉丝 290原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值