温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Python scrapy爬虫

发布时间:2021-11-22 11:28:37 来源:亿速云 阅读:119 作者:iii 栏目:大数据

这篇文章主要讲解了“怎么使用Python scrapy爬虫”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python scrapy爬虫”吧!

项目需求

在专门供爬虫初学者训练爬虫技术的网站上爬取名言警句。

创建项目

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

(base) λ scrapy startproject quotes 
New Scrapy project 'quotes', using template directory 'd:\anaconda3\lib\site- packages\scrapy\templates\project', created in: 
  D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫\quotes 
You can start your first spider with: 
  cd quotes 
  scrapy genspider example example.com

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

D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫 (master) 
(base) λ cd quotes\ 
D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫\quotes (master) 
(base) λ scrapy genspider quotes quotes.com 
Cannot create a spider with the same name as your project 

D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫\quotes (master) 
(base) λ scrapy genspider quote quotes.com 
Created spider 'quote' using template 'basic' in module: 
  quotes.spiders.quote

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

quotes 
  │ items.py 
  │ middlewares.py 
  │ pipelines.py 
  │ settings.py 
  │ __init__.py │
  ├─spiders 
    │ quote.py 
    │ __init__.py

robots.txt

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

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

# filename:settings.py 

# Obey robots.txt rules 
ROBOTSTXT_OBEY = False

分析页面

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

数据信息

在Chrome浏览器中打开页面http://quotes.toscrape.com,然后选择“审查元素”,查看其HTML代码。

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


 

怎么使用Python scrapy爬虫

编写spider

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

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

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

  • name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。

  • start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。

  • parse(): 是 spider 的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

import scrapy 

class QuoteSpider(scrapy.Spider): 
  name = 'quote' 
  allowed_domains = ['quotes.com'] 
  start_urls = ['http://quotes.toscrape.com/'] 
  def parse(self, response): 
    pass

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

重点:

  • name 是爬虫的名字,是在 genspider 的时候指定的。

  • allowed_domains 是爬虫能抓取的域名,爬虫只能在这个域名下抓取网页,可以不写。

  • start_urls 是Scrapy抓取的网站,是可迭代类型,当然如果有多个网页,列表中写入多个网址即可,常用列
    表推导式的形式。

  • parse 称为回调函数,该方法中的response就是 start_urls 网址发出请求后得到的响应。当然也可以指定其他函数来接收响应。一个页面解析函数通常需要完成以下两个任务:
    提取页面中的数据(re、XPath、CSS选择器)提取页面中的链接,并产生对链接页面的下载请求。

页面解析函数通常被实现成一个生成器函数,每一项从页面中提取的数据以及每一个对链接页面的下载请求都
由yield语句提交给Scrapy引擎。

解析数据

import scrapy 

... 

def parse(self, 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_urls 中可以写多个网址,以列表格式分割开即可。

  • extract() 是提取css对象中的数据,提取出来以后是列表,否则是个对象。并且对于 extract_first() 是提取第一个

运行爬虫

在 /quotes 目录下运行 scrapy crawl quotes 即可运行爬虫项目

运行爬虫之后发生了什么?

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 crawl quote -o quotes.csv 
2020-01-08 20:48:44 [scrapy.utils.log] INFO: Scrapy 1.8.0 started (bot: quotes) 
....

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

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

感谢各位的阅读,以上就是“怎么使用Python scrapy爬虫”的内容了,经过本文的学习后,相信大家对怎么使用Python scrapy爬虫这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI