爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫

2022-10-1820:18:12云计算与物联网Comments699 views字数 3939阅读模式

Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

为了方便小伙伴们根据自己的业务需求选择适用的爬虫工具,我对目前常用的几种做了对比,如下表所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

常用爬虫工具对比文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy简介

Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy的工作原理如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy工作原理文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Python数据分析之Scrapy第一练:十分钟亲手编写一个Scrapy爬虫

原创2022-05-11 19:36·职教之光文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

背景

在前面的几篇关于爬虫的文章中,我们对基础的Requestslxml两个库做了简要介绍,但是重所周知,Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

为了方便小伙伴们根据自己的业务需求选择适用的爬虫工具,我对目前常用的几种做了对比,如下表所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

常用爬虫工具对比文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

另外,有需要的伙伴可以简单回顾下之前的两篇文章,链接如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

  • Python数据分析之爬虫第四练:如何避免爬取到重复的数据?
  • Python数据分析之爬虫第六练:五分钟掌握XPath使用窍门

需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy简介

Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy的工作原理如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy工作原理文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

第1步:爬虫使用URL构造一个请求,提交给引擎。如要伪装成浏览器,或者设置代理IP,先在爬虫中间件中设置,再发送给引擎。
第2步:引擎将请求提交给调度器,调度器根据请求的优先级确定执行顺序。
第3步:引擎从调度器获取即将要执行的请求。
第4步:引擎通过下载器中间件,将请求发送给下载器下载页面。
第5步:页面完成下载后,下载器会生成一个响应对象并将其发送给引擎。下载后的数据会保存于响应对象中。
第6步:引擎接收来自下载器的响应对象后,通过爬虫中间件,将其发送给爬虫进行处理。
第7步:爬虫将抽取到的一条数据实体和新的请求发送给引擎。
第8步:引擎将从爬虫获取到的实体发送给项目管道,项目管道实现数据持久化等功能。同时将新的请求发送给调度器,再从第2步开始重复执行,直到调度器中没有更多的请求,引擎关闭该网站。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

一个简单的爬虫

1 需求分析文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

假设我们现在需要爬取起点中文网畅销排行榜的数据,数据内容包括:小说名称、作者、小说类型和连载状态。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

目标页面文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

大家可以先回顾下,我们在lxml那篇文章中讲过的网页XPath信息复制获取的便捷途径,如上图所示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

我们也可以通过下面的代码和页面数据对比进行验证。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

# 导入爬虫和正则工具包
import requests as req
import re
from lxml import etree

# UA代表访问网站的浏览器是哪种浏览器,可以通过在地址栏中输入“about:version”获取
# “\”是行连接符,
headers = {'User-Agent':
          'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
           AppleWebkit/537.36 (KHTML, like Gecko) \
           Chrome/100.0.4896.127 Safari/537.36'}  

qidianurl = 'https://www.qidian.com/all/'  # 目标网址:起点中文网
qidianpage = req.get(qidianurl, headers=headers).text

qidianhtml = etree.HTML(qidianpage)  # 解析获取到的html文件  
bookname1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/h2/a/text()')  # 小说名称
bookauthor1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/a[1]/text()')  # 作者
booktype1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/a[2]/text()')  # 类型
bookstatus1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/span/text()')  # 连载状态

print('The book name is:%s。\n' % bookname1)
print('The book author is:%s。\n' % bookauthor1)
print('The book type is:%s。\n' % booktype1)
print('The book status is:%s。\n' % bookstatus1)

2 创建Scrapy项目文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

在创建项目之前,肯定是先要安装Scrapy库,安装方法与其它的库一致,也是通过pip install scrapy实现,只不过需要注意的是在Jupyter环境中需要在前面加个!,以表示执行的是shell命令。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

!pip install scrapy 

安装完成后,就可以创建爬虫项目,Jupyter中的创建方式如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

!scrapy startproject SHLQidianSpider

其中,最后面的“SHLQidianSpider”是我的爬虫项目名称,大家可以根据自己的需要修改。创建成功后,会出现下面的信息:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

Scrapy项目创建成功信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

需要注意的是最后的提示内容,后续步骤需要在爬虫项目的根目录下执行,而不是Jupyter的当前目录,否则会出现报错。如果适用的是CMD命令行,直接cd到对应目录即可,下图是一个简单的示例,大家根据自己的实际路径进行修改。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

CMD进入爬虫项目根目录文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

3 编码爬虫代码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

创建完项目之后,在项目的根目录下执行生成爬虫的命令,如下所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

scrapy genspider SHL_qidian_hot_spider_20220511 example.com

这可以在"
/Work/SHLQidianSpider/SHLQidianSpider/spiders 
"目录(一定要注意位置)中创建一个python脚本,我已经命名为“
SHL_qidian_hot_spider_20220511.py”,并且内容已经修改为如下的内容:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

#-*-coding:utf-8-*-
from scrapy import Request
from scrapy.spiders import Spider

class HotSalesSpider(Spider):
    #定义爬虫名称
    name = 'hot'
    #起始的URL列表:起点畅销榜前2页
    start_urls = ["https://www.qidian.com/rank/hotsales/",
                 "https://www.qidian.com/rank/hotsales/page2/"] 
    
    #解析函数
    def parse(self, response):
        #使用xpath定位到小说内容的div元素
        list_selector = response.xpath("//div[@class='book-mid-info']")
        #依次读取每部小说的元素,从中获取名称、作者、类型和形式
        for one_selector in list_selector:
            #获取小说名称
            name = one_selector.xpath("h2/a/text()").extract()[0]
            #获取作者
            author = one_selector.xpath("p[1]/a[1]/text()").extract()[0]
            #获取类型
            type = one_selector.xpath("p[1]/a[2]/text()").extract()[0]
            #获取形式(连载/完本)
            form = one_selector.xpath("p[1]/span/text()").extract()[0]
            #将爬取到的一部小说保存到字典中
            hot_dict = {
                "name":name,   # 小说名称
                "author":author,  # 作者
                "type":type,      # 类型
                "form":form  # 形式
                }      
            #使用yield返回字典
            yield hot_dict

在我的Jupyter中的路径如下图,大家根据自己的实际部署情况自行修改即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

脚本创建目录位置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

当然,我们也可以直接在上述目录下直接创建python脚本,不需要通过genspider命令生成。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

4 运行爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

在爬虫项目的根目录下运行爬虫脚本,运行结果如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

运行结果文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

同时,在我们爬虫脚本中设定的输出文件中,也生成了对应的文件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html

爬虫界的扛把子Scrapy,10分钟入门编写一只爬虫
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/28304.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunda/28304.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定