【Python网络爬虫入门教程3】成为“Spider Man”的第三课:从requests到scrapy、爬取目标网站

Python 网络爬虫入门:Spider man的第三课

  • 写在最前面
    • 从requests到scrapy
    • 利用scrapy爬取目标网站
    • 更多内容
  • 结语

写在最前面

有位粉丝希望学习网络爬虫的实战技巧,想尝试搭建自己的爬虫环境,从网上抓取数据。

前面有写一篇博客分享,但是内容感觉太浅显了
【一个超简单的爬虫demo】探索新浪网:使用 Python 爬虫获取动态网页数据

本期邀请了擅长爬虫的朋友@PoloWitty,来撰写这篇博客。通过他的专业视角和实战经验,一步步引导我们入门,成为一名数据探索的“Spider Man”。

【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
【Python网络爬虫入门教程2】成为“Spider Man”的第二课:观察目标网站、代码编写
【Python网络爬虫入门教程3】成为“Spider Man”的第三课:从requests到scrapy、爬取目标网站


随着互联网数据的指数级增长,了解如何有效地提取这些信息变得越来越重要。无论是文本模型如ChatGPT,还是视觉模型如Stable Diffusion,它们的训练数据大多来源于互联网的海量数据。在这个日新月异的大数据时代,爬虫也算是其中不得不点的一项基础技能树了。

本系列文章将深入浅出地介绍Python网络爬虫的基础知识和技术,从 Requests 库到 Scrapy 框架的 入门级 使用,为你开启python网络爬虫的大门,成为spider man的一员,并最终以ScrapeMe网站作为目标示例,爬取下网站上的可爱又有趣的宝可梦照片。

在开始之前,还要啰嗦几句叠个甲,网络爬虫虽然强大,但在使用时必须遵守法律法规和网站的爬虫协议。不违法爬取数据,遵守相关法律法规哦~

请添加图片描述

这是本系列的第三篇文章,将会以ScrapeMe网站作为示例,展示如何利用scrapy库更好的来对网站上的宝可梦图片进行爬取。

文章目录

  • 写在最前面
    • 从requests到scrapy
    • 利用scrapy爬取目标网站
    • 更多内容
  • 结语

从requests到scrapy

当谈到网络爬虫时,起初我们可能会选择简单的方案,比如使用requestsBeautiful Soup这样的工具,就像手工艺者用胶水和剪刀来完成手工艺品。但是,当我们的爬虫任务变得更为复杂、庞大时,我们就需要更高效、更强大的工具。

这时候,Scrapy登场了!它就像是一台全能机器人助手,能够应对各种爬虫任务。通过Scrapy,我们可以创建整个爬虫项目,定义抓取规则和流程。它能够并行抓取多个页面,就像是多线程的大明星!更棒的是,它内置了各种功能,比如自动的请求调度、页面解析以及数据存储。简直就像是一套量身定制的工具箱,让我们更轻松地面对爬虫世界的挑战。

具体到我们在第二课中实现的简单爬虫程序,运行过程序的小伙伴可能会发现,爬取的速度并不是很快,而如果要自己实现并行,不仅需要了解并行的相关知识,还要做好并行程序之间的通讯调度等等。而Scrapy框架则可以直接帮我们自动完成这些功能,我们仅需要关注于单个线程代码的实现即可,是不是很方便呢

利用scrapy爬取目标网站

首先,我们需要利用pip install Scrapy命令下载Scrapy包。

为了创建一个完整的scrapy项目,我们可以使用其提供的命令行工具进行创建,在命令行中输入scrapy startproject spider,我们可以新建一个名为spider的全新scrapy项目,在这个项目目录下,包含以下一些文件:

.
├── scrapy.cfg
└── spider
    ├── __init__.py 
    ├── items.py 
    ├── middlewares.py
    ├── pipelines.py
    ├── settings.py # 项目配置文件
    └── spiders 	# 用于放置你的爬虫程序的目录
        └── __init__.py

除了上述给出注释的文件,其他文件里的内容可以暂时不进行理会,感兴趣的同学可以在网上查找相关内容进行学习。

然后我们进入spider/spiders目录下,在命令行中输入scrapy genspider pokemon scrapeme.live/shop/ ,创建一个名为pockmon的爬虫(一个爬虫项目下可以又多个爬虫),用于爬取scrapme.live/shop/网页。

此时,在spider/spiders目录下,我们便可以发现我们的爬虫程序pokemon.py,它当前的内容为自动填充的结果:

import scrapy


class PokemonSpider(scrapy.Spider):
    name = "pokemon"
    allowed_domains = ["scrapeme.live"]
    start_urls = ["http://scrapeme.live/"]

    def parse(self, response):
        pass

接下来我们需要向其中填入新的内容,并可以使用scrapy crawl pokemon -O image_urls.csv命令运行该爬虫,得到我们想要的结果:

import scrapy
import requests

def download_from_url(url:str):
    '''
    利用requests库,从相应的图片链接中下载对应的图片
    结果会保存到results文件夹中
    '''
    filename = url.split('/')[-1]
    with open(f'../results/{filename}','wb') as fp:
        fig_response = requests.get(url)
        fp.write(fig_response.content)


class PokemonSpider(scrapy.Spider):
    name = "pokemon"
    allowed_domains = ["scrapeme.live"]
    start_urls = [f"https://scrapeme.live/shop/page/{pageNum}/?orderby=popularity" for pageNum in range(1,49)] # 所有的page链接

    def parse(self, response):
        image_urls = response.css('img') # 找到所有的img对应的位置
        for image_url in image_urls:
            url = image_url.attrib['src']
            download_from_url(url)
            yield {'image_url':url}

其中PokemonSpider继承了scrapy.Spider类,会使用name属性命名该爬虫,并将请求限制在allowed_domains内,以start_urls开始进行爬取。在parse()函数中,会得到一个response对象,这个对象其实就很类似于之前使用Beautiful Soup解析后的DOM树,我们可以直接使用repoonse.css()方法获取到网页中以相应css标签进行标记的内容,最后的yield会将每次parse的图像链接保存至image_urls.csv输出文件中。而相应的下载的图片依旧是在results文件夹下。

而想要使用scrapy让爬虫爬取速度更快,加大并发量,只需要在setting.py中新加入一行CONCURRENT_REQUESTS = 256即可hhh,是不是so easy呢

更多内容

Scrapy本身还有非常非常多的可拓展空间,当前成熟的爬虫程序中有很多便是使用scrapy进行编写的。而本课程作为入门课程,基本也就要到此为止了,如果还想学习更多关于scrapy的相关知识,可以阅读Scrapy Tutorial或者是网上的其他进阶课程。

结语

我们已经一起初步探索了网络爬虫的精彩世界,我们从HTML背景知识的介绍开始,深入理解了requestsBeautiful Soup这两个强大的工具。然后,我们在第二篇中利用这些知识和工具,成功爬取了一个网站上所有宝可梦的图片,获得了丰富的数据。

而第三篇则让我们迈入了更高级的领域,学习了如何使用Scrapy库来处理更大规模的爬虫任务。Scrapy让我们更高效、更自动化地抓取了目标网站的宝可梦图片,为我们的爬虫之旅增添了更多神奇的色彩,并为之后更复杂的任务打下坚实的基础。

通过这三篇课程,我们不仅仅学到了技术知识,更领略到了爬虫世界的广阔无垠。爬虫不仅是获取数据的手段,更是对互联网深度探索的一种方式。希望这些课程能为你的学习之路增添一些乐趣,并为你今后在数据获取和应用的旅程中提供帮助。愿你在这片广阔的数据海洋中畅游自如,发现更多精彩!

了爬虫世界的广阔无垠。爬虫不仅是获取数据的手段,更是对互联网深度探索的一种方式。希望这些课程能为你的学习之路增添一些乐趣,并为你今后在数据获取和应用的旅程中提供帮助。愿你在这片广阔的数据海洋中畅游自如,发现更多精彩!

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

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

相关文章

如何使用iPhone15在办公室远程观看家里群晖nas上的4k电影?

文章目录 1.使用环境要求:2.下载群晖Video Station:3.公网访问本地群晖Video Station中的电影:4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端(搭载安卓,ios,ipados等系统的设…

Java并发(十七)----变量的线程安全分析

1、成员变量和静态变量是否线程安全 如果它们没有共享,则线程安全 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况 如果只有读操作,则线程安全 如果有读写操作,则这段代码是临界区,需要考虑线…

深信服AF设置安全防护策略

以百度为例,禁止内网用户访问www.baidu.com 1、对象→安全策略模板→新增 2、名称自定义,安全配置只选择url过滤 3、点击图标→新增→设置名称及url 勾选刚刚新增的url--deny→确定 4、高级选项→确定 5、策略→安全策略→安全防护策略→新增用户防护策略…

unity 3分钟 制作粒子爆炸效果 可以用在三消消除等

思路就是: 有一个对象池,管理各种特效。 当需要播放特效时,触发如下代码: blocker为粒子生成的位置 var particles gamePools.iceParticlesPool.GetObject(); if (particles ! null) {particles.transform.position blocker…

如何通过内网穿透工具实现任意浏览器远程访问Linux本地zabbix web管理界面

前言 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 本地zabbix web管理界面限制在只能局域…

一文带你全面了解In App Bidding竞价变现 | TOPON变现干货

2021年,伴随着Facebook、Admob、Pangle、腾讯优量汇等国内外头部广告平台Bidding的正式推出及全面推广,APP广告变现正式步入bidding竞价时代。早在2020年,TopOn便已推出Header Bidding头部竞价功能,彼时主流的广告变现依然是以Wat…

集合的几个遍历方法

1. 集合的遍历 1.0 创建集合代码 List<String> strList new ArrayList<>(); strList.add("huawei"); strList.add("xiaomi"); strList.add("tencent"); strList.add("google"); strList.add("baidu");1.1 fo…

OpenCV-Python:DevCloud CodeLab介绍及学习

1.Opencv-Python演示环境 windows10 X64 企业版系统python 3.6.5 X64OpenCV-Python 3.4.2.16本地PyCharm IDE线上注册intel账号&#xff0c;使用DevCloud CodeLab 平台 2.DevCloud CodeLab是什么&#xff1f; DevCloud是一个基于云端的开发平台&#xff0c;提供了强大的计算…

dcat admin多后台和自定义登录

多后台按照教程配置 https://learnku.com/docs/dcat-admin/2.x/multi-application-multi-background/8475 自定义登录 我的新后台的登录需要另外一个用户表&#xff0c;所以原来的逻辑要修改一下。 1、首先是模板修改 参考连接 https://learnku.com/docs/dcat-admin/2.x/ba…

我有才打造专属个人或企业知识付费平台,核心功能设计

在当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;我有才提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1a; 一…

2023年运营级网赚网盘平台搭建指南(包含源码和教程)

源码介绍 为什么要考虑自己搭建网盘呢&#xff1f;现如今&#xff0c;许多大型网盘平台都对文件添加了各种限制&#xff0c;导致很多文件容易被删除。而且&#xff0c;大部分网盘还会限制下载速度&#xff0c;如果没有开通VIP会员&#xff0c;使用起来非常不便。 本指南提供了…

tcpdump抓包命令

tcpdump抓包命令 tcpdump 的抓包保存到文件的命令参数是-w xxx.cap 抓eth1的包 tcpdump -i eth1 -w /tmp/xxx.cap抓 192.168.1.123的包 tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap抓192.168.1.123的80端口的包 tcpdump -i eth1 host 192.168.1.123 and port 80 -w …

项目经理和产品经理哪个更有发展前景?

如果是单看“钱途”的话&#xff0c;如果是在传统行业&#xff0c;可能差不多&#xff1b;如果是在IT行业的话&#xff0c;可能更需要项目经理&#xff1b;互联网行业的话&#xff0c;可能更需要产品经理。 项目经理跟产品经理两个证都挺受市场欢迎的&#xff0c;两个岗位职责…

测试 cusolver 是否必须设置 stream

cusolverDnCreate之后&#xff0c;如果不调用 cusolverSetStream&#xff0c;那么&#xff0c;cusolver的这个handle是否可以被正常使用来调用cusolver的Math API 呢&#xff1f; 1&#xff0c;不设置时会Get到 NULL stream 测试源码 #include <cuda_runtime.h> #incl…

springboot利用easyexcel在浏览器中下载excel

前言 项目中操作excel是一种很常用的功能&#xff0c;比如下载一份excel的报价单。这篇文章会介绍一款excel的处理工具以及导出遇到的三个常见异常(重要)。 之前遇到一个这样的需求&#xff1a;后台管理页面&#xff0c;点击下载按钮&#xff0c;下载一份excel格式的报价清单…

设计模式——策略模式(Strategy Pattern)

概述 策略模式又叫政策模式&#xff0c;是一种对象行为型模式。它是将定义的算法家族分别封装起来&#xff0c;让它们之间可以互相替换&#xff0c;从而让算法的变化不会影响到使用算法的用户。策略模式的主要目的是将算法的定义与使用分开&#xff0c;也就是将算法的行为和环…

NV040D语音芯片应用于取暖桌:智能语音提高用户体验

科技与生活的结合&#xff0c;是科技发展的展示。天气的降温&#xff0c;取暖桌越来越取得用户的心&#xff0c;时至今日传统的取暖桌已经没有办法满足用户的需求&#xff0c;智能语音取暖桌给用户的生活带来了不一样的体验。 NV040D语音芯片是一款性能稳定的芯片&#xff0c;拥…

arcgis api for js 图层标注文本不显示

在打包arcgis api for js 项目后&#xff0c;更新到现场所有地图文本要素不显示的时候。 可能就是环境设置问题了&#xff0c;需要配置iis或者ngixs里边配置如下类型 iis发布的项目 1、打开iis中发布的网站 2、找到网站的MIME类型如下图 3、添加一下类型&#xff08;一个都不…

CentOS系统下配置HTTP服务器的步骤

在CentOS系统下配置HTTP服务器涉及到一系列的步骤。以下是一个基本的步骤概述&#xff0c;帮助你了解如何为CentOS系统配置HTTP服务器。 安装HTTP服务器软件&#xff1a; 首先&#xff0c;你需要在CentOS系统上安装HTTP服务器软件。常见的选择是Apache HTTP服务器。你可以使用…

前端开发新趋势:Web3、区块链与虚拟现实

文章目录 Web3&#xff1a;下一代互联网区块链技术去中心化应用程序&#xff08;DApps&#xff09; 区块链&#xff1a;重塑数字世界数字钱包NFT&#xff08;非同质化代币&#xff09; 虚拟现实&#xff1a;沉浸式体验WebVR和WebXR三维图形 新挑战与机会性能与复杂性安全性创新…