Python爬虫基础之初次使用scrapy爬虫实例


Posted in Python onJune 26, 2021

项目需求

在专门供爬虫初学者训练爬虫技术的网站(http://quotes.toscrape.com)上爬取名言警句。

创建项目

在开始爬取之前,必须创建一个新的Scrapy项目。进入您打算存储代码的目录中,运行下列命令:

(base) λ scrapy startproject quotes
New scrapy project 'quotes ', using template directory 'd: \anaconda3\lib\site-packages\scrapy\temp1ates\project ', created in:
    D:\XXX
You can start your first spider with :
    cd quotes
    scrapy genspider example example. com

首先切换到新建的爬虫项目目录下,也就是/quotes目录下。然后执行创建爬虫文件的命令:

D:\XXX(master)
(base) λ cd quotes\
  
D:\XXX\quotes (master)
(base) λ scrapy genspider quotes quotes.com
cannot create a spider with the same name as your project
 
D :\XXX\quotes (master)
(base) λ scrapy genspider quote quotes.com
created spider 'quote' using template 'basic' in module:quotes.spiders.quote

该命令将会创建包含下列内容的quotes目录:

Python爬虫基础之初次使用scrapy爬虫实例

robots.txt

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的网络蜘蛛,此网站中的哪些内容是不应被搜索引擎的爬虫获取的,哪些是可以被爬虫获取的。

robots协议并不是一个规范,而只是约定俗成的。

#filename : settings.py
#obey robots.txt rules
ROBOTSTXT__OBEY = False

分析页面

编写爬虫程序之前,首先需要对待爬取的页面进行分析,主流的浏览器中都带有分析页面的工具或插件,这里我们选用Chrome浏览器的开发者工具(Tools→Developer tools)分析页面。

数据信息

在Chrome浏览器中打开页面http://lquotes.toscrape.com,然后选择"Elements",查看其HTML代码。

可以看到每一个标签都包裹在

Python爬虫基础之初次使用scrapy爬虫实例

编写spider

分析完页面后,接下来编写爬虫。在Scrapy中编写一个爬虫, 在scrapy.Spider中编写代码Spider是用户编写用于从单个网站(或者-些网站)爬取数据的类。

其包含了-个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容,提取生成item的方法。

为了创建一个Spider, 您必须继承scrapy.Spider类,且定义以下三个属性:

  • name:用于区别Spider。该名字必须是唯一-的, 您不可以为不同的Spider设定相同的名字。
  • start _urls:包含了Spider在启动时进行爬取的ur列表。因此, 第一个被获取到的页面将是其中之一。后续的URL则从初始的URL获取到的数据中提取。
  • parse():是spider的一一个方法。被调用时,每个初始URL完成下载后生成的Response对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL 的Request对象。
import scrapy
 
class QuoteSpi der(scrapy . Spider):
    name ='quote'
    allowed_ domains = [' quotes. com ']
    start_ urls = ['http://quotes . toscrape . com/']
    
    def parse(self, response) :
        pass

下面对quote的实现做简单说明。

  • scrapy.spider :爬虫基类,每个其他的spider必须继承自该类(包括Scrapy自带的其他spider以及您自己编写的spider)。
  • name是爬虫的名字,是在genspider的时候指定的。
  • allowed_domains是爬虫能抓取的域名,爬虫只能在这个域名下抓取网页,可以不写。
  • start_ur1s是Scrapy抓取的网站,是可迭代类型,当然如果有多个网页,列表中写入多个网址即可,常用列表推导式的形式。
  • parse称为回调函数,该方法中的response就是start_urls 网址发出请求后得到的响应。当然也可以指定其他函数来接收响应。一个页面解析函数通常需要完成以下两个任务:

1.提取页面中的数据(re、XPath、CSS选择器)
2.提取页面中的链接,并产生对链接页面的下载请求。
页面解析函数通常被实现成一个生成器函数,每一项从页面中提取的数据以及每一个对链接页面的下载请求都由yield语句提交给Scrapy引擎。

解析数据

import scrapy
 
def parse(se1f,response) :
    quotes = response.css('.quote ')
    for quote in quotes:
        text = quote.css( '.text: :text ' ).extract_first()
        auth = quote.css( '.author : :text ' ).extract_first()
        tages = quote.css('.tags a: :text' ).extract()
        yield dict(text=text,auth=auth,tages=tages)

重点:

  • response.css(直接使用css语法即可提取响应中的数据。
  • start_ur1s 中可以写多个网址,以列表格式分割开即可。
  • extract()是提取css对象中的数据,提取出来以后是列表,否则是个对象。并且对于
  • extract_first()是提取第一个

运行爬虫

在/quotes目录下运行scrapycrawlquotes即可运行爬虫项目。
运行爬虫之后发生了什么?

Scrapy为Spider的start_urls属性中的每个URL创建了scrapy.Request对象,并将parse方法作为回调函数(callback)赋值给了Request。

Request对象经过调度,执行生成scrapy.http.Response对象并送回给spider parse()方法进行处理。

完成代码后,运行爬虫爬取数据,在shell中执行scrapy crawl <SPIDER_NAME>命令运行爬虫'quote',并将爬取的数据存储到csv文件中:

(base) λ scrapy craw1 quote -o quotes.csv
2021-06-19 20:48:44 [scrapy.utils.log] INF0: Scrapy 1.8.0 started (bot: quotes)

等待爬虫运行结束后,就会在当前目录下生成一个quotes.csv的文件,里面的数据已csv格式存放。

-o支持保存为多种格式。保存方式也非常简单,只要给上文件的后缀名就可以了。(csv、json、pickle等)

到此这篇关于Python爬虫基础之初次使用scrapy爬虫实例的文章就介绍到这了,更多相关Python scrapy框架内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
Python可变参数用法实例分析
Apr 02 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
django 解决manage.py migrate无效的问题
May 27 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
Python如何让字典保持有序排列
Apr 29 Python
Python上下文管理器Content Manager
Jun 26 #Python
仅用几行Python代码就能复制她的U盘文件?
总结几个非常实用的Python库
Jun 26 #Python
手残删除python之后的补救方法
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Python Pandas模块实现数据的统计分析的方法
Jun 24 #Python
FP-growth算法发现频繁项集——发现频繁项集
You might like
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python 常用 PEP8 编码规范详解
2017/01/22 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
django页面跳转问题及注意事项
2019/07/18 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python 代码调试技巧示例代码
2020/08/11 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
制作部班长职位说明书
2014/02/26 职场文书
小学庆六一活动方案
2014/02/28 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers