查看原文
其他

【爬虫基础】Scrapy爬虫框架

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:胡艺粼 中南财经政法大学金融学院

本文编辑:董高飞

技术总编:金点

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
01定义

Scrapy是一个基于twisted的异步处理框架,用于抓取网站并从页面中提取结构化数据。Scrapy通过引擎(Scrapy Engine)、调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和项目管道(Item Pipeline)等“组件”实现请求发送、数据提取处理和保存等操作。

02核心组件
  • 引擎(Scrapy Engine):负责整个系统的数据流处理。
  • 调度器(Scheduler):接受引擎发送的requsts请求,按照一定的方式排列入队,在引擎再次请求时返回。
  • 下载器(Downloader):下载引擎发送的所有requests请求,并将获取到的内容返回给爬虫
  • 爬虫(Spider):负责处理所有response,分析提取所需信息,如果是所需item信息,则传输给项目管道进行保存;如果解析出来的是下一层链接,那么就继续传导给调度器。
  • 项目管道(Item Pipeline):负责处理爬虫中获取到的item信息,包括详细分析、过滤和清除不需要的信息、持久化储存等。
03建立Scrapy爬虫项目流程
1.安装Scrapy

在终端使用pip install scrapy命令进行安装。安装后,在终端中输入scrapy命令,如果没有报错即为安装成功。

2.创建项目

首先使用终端指令创建一个项目。假设我们将其放在E盘python文件夹下,创建一个叫Example的项目。具体操作如下:

scrapy startproject Example

我们可以发现,执行命令后,生成的Example文件夹里面有一个同名子目录,里面包含了很多目录结构,分别是spiders(爬虫文件夹/爬虫目录)、items.py、middlewares.py、pipelines.py、settings.py。其中,spiders子目录中要存放爬虫文件,items.py主要存放需要保存的数据名称,pipelines.py用来执行保存数据的操作,settings.py是一个配置文件,存放相关配置。
3.创建爬虫文件
在Spider子目录中创建一个爬虫文件,终端命令的"ExampleName"为爬虫文件的名称,"www.xxx.com"为想要爬取的网址,可以先设定为起始url,后续在源文件中可以修改。
cd Example #爬虫文件必须新建在Spider的子目录中,所以在创建爬虫文件之前要进入到刚才创建的项目文件夹中scrapy genspider ExampleName www.xxx.com

4.修改配置文件
切换到settings.py文件,修改相应配置,以保证爬虫代码可以成功运行。首先,修改USER_AGENT进行伪装。其次,修改ROBOTSTXT_OBEY为"False"。最后,用LOG_LEVEL设置日志等级,只显示warning以及warning以上的日志。

5.编写爬虫代码
在完成以上操作后,就可以进行爬虫代码的编写,整个操作在爬虫文件ExapmleName中进行。打开ExapmleName可以看到如下已经设好的基础模板,其中start_urls里是我们给定初始爬取的网页,可以手动修改,也可以在里面添加多个网页链接。

这里以爬取豆瓣图书排行榜作为例子进行讲解,具体代码如下:
import scrapy
class ExamplenameSpider(scrapy.Spider): name = "ExampleName" allowed_domains = ['douban.com'] start_urls = ["https://book.douban.com/top250?start=0"]
def parse(self, response): div_list = response.xpath('//div[@class="indent"]/table') for div in div_list: item = {} item['title'] = div.xpath("./tr/td[2]/div/a/@title").extract()[0] item['detail'] = div.xpath("./tr/td[2]/p[@class='pl']/text()").extract()[0] item['slogan'] = div.xpath("./tr/td[2]/p[@class='quote']/span/text()").get() yield item
6.保存数据
通过以上步骤获取到所需数据之后,就可以去管道中将爬取的数据保存到本地或数据库中。首先,在settings.py文件中打开管道,将#Configure item pipelines注释行解除,然后在pippelines.py文件中完成下列操作:
from itemadapter import ItemAdapterimport json
class ExamplePipeline: def process_item(self, item, spider): content=json.dumps(item, ensure_ascii=False)+"\n" f.write(content)
另外,也可以通过在pipeline.py文件中编写代码将数据保存到MySQL数据库,具体可参照以往推文 《如何将Python爬取到的数据保存到MySQL中》
7.执行项目
通过终端指令执行编写好的所有操作代码:
scrapy crawl ExampleName
爬取结果如图所示:

以上就是对Scrapy框架的介绍,可以发现Scrapy帮助我们写好了很多代码内容,我们只需要根据需求定制自己需要的功能即可,大大减少了工作量,对于这么方便好用的一个框架,大家要多多练习,熟练掌握哦!

END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐迈向交互式编程,ChatGPT更新!一个简单又好玩的Python库——MyQR
replace命令的“加强版”!——如何使用ereplace,结合egen
XML 轻松读取:用 Python 发现数据宝藏

爬虫俱乐部重磅推出cnstata.com.cn

Markdown:让数学公式输入更方便!

处理日期的好手:pendulum
定制属于自己的“贾维斯”——Python调用Chat
学会format,数据格式任你拿捏【Python实战】游客最青睐的城市,你的家乡上榜了吗?

What’ new ? 速通Stata 18

【爬虫实战】Python爬取美食菜谱揭秘网络中心人物,你会是其中之一吗?考研之后,文科生需以“do”躬“do”!焕新升级!轻松获取港股、权证的历史交易数据爬虫俱乐部的精彩答疑---cntraveltime【爬虫俱乐部新命令速递】在Stata中与ChatGPT对话

用`fs`命令批量获取文件夹和不同文件夹下的excel文件

自然语言处理之实例应用     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存