51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1261|回复: 1
打印 上一主题 下一主题

scrapy基本概念介绍

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-25 14:37:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
scrapy 命令行工具

help:帮助信息(scrapy –help)
version:版本信息,可以添加-v查看scrapy各个组件的信息(scrapy version -v)
startproject:新建一个工程(scrapy startproject example)
genspider:产生一个spider(scrapy genspider example example.com)
list:查看本工程中包含的spiders
view:在浏览器中打开网页,这个网页就是scrapy处理的网页(scrapy view http://example.com
parse:解析一个URL(使用对应的spider),打印结果
shell:可交互的scrapy爬取控制台
runspider:运行一个自包含的爬虫,即没有创建工程
bench:基准测试
scrapy的重要组件

Spider

基本介绍

Spider是一个类,它定义了怎样爬取一个网站,包括怎样跟踪链接、怎样提取数据。

执行流程:
- 根据start_urls产生初始Requests
- 解析responce
- 使用selector
- 存储items

zaobao Spider

基类介绍(scrapy.Spider)

属性
name:spider的名称,同一工程中唯一
allowed_domains:允许的域名
start_urls:初始urls
custom_settings:个性化设置,覆盖全局设置(settings.py)
crawler:抓取器,spider将绑定到它上面
settings:配置实例,包含工程中所有的配置变量
logger:日志实例
方法
from_crawler(crawler, *args, **kwargs):类方法,用于创建spiders
start_requests():生成初始的requests
make_requests_from_url(url):根据url生成一个request
parse(response):解析网页内容
log(message[, level, component]):兼容老版本
self.logger.info(“log内容”)
closed(reason):当spider关闭的时候调用的方法
子类介绍

CrawlerSpider

最常用的spider,用于抓取普通网页
和基类比较增加了两个成员
rules:定义了一些抓取规则(链接怎么跟踪、使用哪一个parse函数解析此链接)
parse_start_url(response):解析初始url产生的response
示例



XMLFeedSpiderCSVFeedSpiderSitemapSpiderSelector

scrapy默认使用Selector作为网页解析工具

实例化

常用方法
  • xpath
  • css
  • re
  • extract
  • extract_first
Item

示例

  1. import scrapy


  2. class Product(scrapy.Item):
  3.     name = scrapy.Field()
  4.     price = scrapy.Field()
  5.     stock = scrapy.Field()
复制代码
Item Pipeline作用
  • 清洗HTML数据
  • 验证抓取到的数据(检查是否有数据)
  • 检查是否重复(然后丢弃重复数据)
  • 存储数据到数据库中
示例
  1. from scrapy.exceptions import DropItem


  2. class PricePipeline(object):
  3.     vat_factor = 1.15

  4.     def process_item(self, item, spider):
  5.         if item['price']:
  6.             if item['price_excludes_vat']:
  7.                 item['price'] = item['price'] * self.vat_factor
  8.                 return item
  9.         else:
  10.             raise DropItem("Missing price in %s" % item)
复制代码
激活pipeline

在settings.py里面设置

  1. ITEM_PIPELINES = {
  2.     'myproject.pipelines.PricePipeline': 300
  3. }
复制代码

优先级0-1000,越小越优先


Feed exports


存储抓取到的数据


json

json lines

csv

xml

scrapy的重要对象


Request


scrapy.http.Request的初始化参数

url:必须

callback

method=‘GET’

headers

body

cookies

meta

encoding=’utf-8’

priority=0

don’t_filter=False

errback

其它属性

url

method

headers

body

cookies

meta

copy()

replace()

示例

- 子类
FormRequest实现登陆功能

class scrapy.http.FormRequest(url[, formdata…])

示例



Response

scrapy.http.Response的初始化参数
url:必须参数
status=200
headers
body
flags
其他成员
url
status
headers
body
resquest
meta
flags
copy()
replace()
urljoin(url)
子类
scrapy.http.TextResponse(它有两个子类)
scrapy.http.HtmlResponse
scrapy.http.XmlResponse


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-27 06:49 , Processed in 0.068163 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表