Scrapy入门

Scrapy入门

目录

Scrapy入门

了解scrapy

1.安装scrapy

2.创建项目

3.编写第一个爬虫

4.启动爬虫

重要概念

request对象

response对象


了解scrapy

Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

1.安装scrapy

2.创建项目

首先scrapy startproject <name>, <name>项目名称,如:scrapy startproject tutorial。

之后scrapy会自动的构建项目如下结构:

 scrapy.cfg
     tutorial/
         __init__.py
         items.py
         pipelines.py
         settings.py
         spiders/
             __init__.py

这些文件分别是:

  • scrapy.cfg: 项目的配置文件

  • tutorial/: 该项目的python模块。之后您将在此加入代码。

  • tutorial/items.py: 项目中的item文件.

  • tutorial/pipelines.py: 项目中的pipelines文件.

  • tutorial/settings.py: 项目的设置文件.

  • tutorial/spiders/: 放置spider代码的目录.

3.编写第一个爬虫

在spiders文件夹下创建一个python程序,可以编写如下:

 import scrapy
 ​
 class DmozSpider(scrapy.spiders.Spider):
     name = "dmoz"
     allowed_domains = ["dmoz.org"]
     start_urls = [
         "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
         "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
     ]
 ​
     def parse(self, response):
         filename = response.url.split("/")[-2]
         with open(filename, 'wb') as f:
             f.write(response.body)

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

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

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

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

其中name是必须定义并且是唯一名称,用于标识这个爬虫。

start_urls起始爬去的URL,是一个列表,可以编写多个地址。

parse()函数,scrapy爬虫的入口,自动解析start_urls中的地址,返回一个response对象。默认调用start_urls中的URL,也可以使用函数start_requests(self)规定parse函数的请求。

4.启动爬虫

项目目录执行命令scrapy crawl dmoz,启动名字为dmoz的爬虫进行抓取。

重要概念

scrapy内置许多对象可供使用,比较重要的就是response和request。

request对象

一般用来回调url,进行深度抓取,可以便捷的进行不同方法之间传递。

参数:

  • url(string) : 请求的网址

  • callback(): 将使用此请求的响应(一旦下载)调用的函数作为其第一个参数。

  • method(string): 此请求的HTTP方法。默认为’GET’。

  • meta(dict) : Request.meta属性的初始值。如果给定,则此参数中传递的dict将被浅拷贝。

  • body(str或unicode): 请求体。不管这个参数的类型,存储的最终值将是一个str(不会是unicode或None)。

  • headers(dict): 请求头。dict值可以是字符串或列表。如果 None作为值传递,则不会发送HTTP头。

  • cookie(dict或list) - 请求cookie

常用的便是,使用yield进行下一个函数的回调操作,示例:

在Scrapy中爬多页面的数据且要保存到一个文件中时,即同一个文件存储不同的数据: 爬虫程序通过Request对象将数据(data)传递给ScrapyEngine(引擎),由引擎传递给pipeline(管道模块) 在这里 meta={} 实现传递数据的功能

 def parse_page1(self, response):
     item = MyItem()
     item['main_url'] = response.url
     
     url = "http://www.example.com/some_page.html"
     yield scrapy.Request(url,callback=self.parse_page2,meta={'item':item})
  
 def parse_page2(self, response):
     item = response.meta['item']
     item['other_url'] = response.url
     yield item

response对象

scrapy会在起始函数parse(),直接得到response对象,通过response对象便可以进行页面的解析,这是scrapy自动的将页面解析后的一个对象。

参数:

  • url(string) - 此响应的URL

  • status(integer) - 响应的HTTP状态。默认为200。

  • headers(dict) - 这个响应的头。dict值可以是字符串或列表。

  • body(str) - 响应体。它必须是str,而不是unicode,除非你使用一个编码感知响应子类,如 TextResponse。

  • flags(list) - 是一个包含属性初始值的 Response.flags列表。如果给定,列表将被浅拷贝。

  • request(Requestobject) - 属性的初始值Response.request。这代表Request生成此响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值