吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2090|回复: 8
收起左侧

[Python 原创] 【Python 爬虫教程】Scrapy 学习笔记(二)

[复制链接]
简讯 发表于 2020-2-20 16:35

通过这篇文章,我们会了解到 scrapy 的命令行工具。文章介绍命令行工具的顺序基本符合官方文档的顺序。☘️点此处查看原文。

命令

scrapy的命令分为全局命令和项目内命令。全局命令也就是不需要在项目所在目录下运行,项目内命令必须在生成项目后,在此目录下运行的命令。举个栗子,startproject就是全局命令,因为在运行这个命令的时候还没有项目,check就是项目内命令,因为必须有项目才能检查代码正确与否。

Global commands:

  • startproject
  • genspider
  • settings
  • runspider
  • shell
  • fetch
  • view
  • version

Project-only commands:

  • crawl
  • check
  • list
  • edit
  • parse
  • bench

创建项目

命令:

scrapy startproject testproject

这个命令用于生成我们所需要的爬虫项目。进入到该目录中,会发现生成了许多文件。这些文件的用法在以后都会一一详解。

.
└── testproject
    ├── scrapy.cfg
    └── testproject
        ├── __init__.py
        ├── items.py
        ├── middlewares.py
        ├── pipelines.py
        ├── settings.py
        └── spiders
            └── __init__.py

生成 spider

命令:

scrapy genspider baidu www.baidu.com

进入到 spider 文件夹下,输入该命令会生成一个名为 baidu.py 的文件,cat 这个文件,我们会发现其实就是最基本的 spider 模板。

# -*- coding: utf-8 -*-
import scrapy

class BaiduSpider(scrapy.Spider):
    name = 'baidu'
    allowed_domains = ['www.baidu.com']
    start_urls = ['http://www.baidu.com/']

    def parse(self, response):
        pass

模板选择

在终端输入命令可以查看生成模板的类型:

scrapy genspider -l

输出:

Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

也就是系统自带这四种模板,如果没有指定模板,会选择basic基本模板。如果你问我可以自定义模板吗,当然可以了,不过本文暂时不涉及这个问题,如果有需要可以先自行google。

使用模板命令:

scrapy genspider -t xmlfeed zhihu www.zhihu.com

-t就是TEMPLATE,也就是模板。

例子:

$ scrapy genspider -l
Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

$ scrapy genspider example example.com
Created spider 'example' using template 'basic'

$ scrapy genspider -t crawl scrapyorg scrapy.org
Created spider 'scrapyorg' using template 'crawl'

crawl

用于运行指定spider

命令:

scrapy crawl baidu

check

check用来检查项目中的代码是否有错误。如果没错会返回ok,如果有错会定位错误代码的位置。

命令:

scrapy check

示例:

➜  testproject scrapy check

----------------------------------------------------------------------
Ran 0 contracts in 0.000s

OK

list

运行命令会列出项目中所有的spider。

命令:

scrapy list

示例,在我们创建的项目目录下运行:

➜  testproject scrapy list
baidu
zhihu

shell

运行这个命令会进入命令行交互模式,以给定的 URL(如果给出)或者空(没有给出 URL)启动 Scrapy shell。查看 Scrapy 终端(Scrapy shell)可以做一些简单的操作,可以使用选择器快速获取信息,方便调试。

fetch

使用这个命令会执行一次请求,并调用scrapy的下载器,返回网页的源码。

命令:

scrapy fetch http://www.baidu.com

还可以加三个参数:

--nolog
--headers
--no-redirect

分别是不输出日志信息,返回网页的请求头和禁止重定向。如果网页没有重定向的话返回的还是原网页。

view

命令:

scrapy view http://www.taobao.com

这个命令比较有用,它的作用是请求网址,输出网址的源码,并将该网页保存成一个文件,使用浏览器打开。如果打开的网址和你正常加载的网页有所不同,一般情况下没显示的部分使用了异步加载。因此该命令可以用来检查 spider 所获取到的页面,并确认这是您所期望的。

这样在你以后的抓取过程中就可以使用这个命令分析网页是否使用了异步加载。

runspider

这个命令和crawl命令的区别在于crawl命令后是spider的name,而runspider命令后加的是爬虫的文件名,在本文的项目中,使用crawl命令:

scrapy crawl baidu

使用runspider就是:

scrapy runspider baidu.py

settings

用来获取项目的配置信息。

例如获取项目名称:

➜  testproject scrapy settings --get BOT_NAME
testproject

edit

如果你不使用vim作为编辑器的话,这个命令不常用,因为这个命令会调用vim来编辑文件。

命令:

scrapy edit baidu

parse

获取给定的 URL 并使用相应的 spider 分析处理。如果您提供 –callback 选项,则使用 spider 的该方法处理,否则使用 parse

使用上一篇的例子:

scrapy parse http://quotes.toscrape.com -c parse

支持的操作:

--spider = SPIDER:
bypass spider autodetection and force use of specific spider
跳过自动检测 spider 并强制使用特定的 spider

--a NAME = VALUE:
set spider argument (may be repeated)
设置 spider 的参数(可能被重复)

--callback or -c:
spider method to use as callback for parsing the response
spider 中用于解析返回(response)的回调函数

--pipelines:
process items through pipelines
在 pipeline 中处理 item

--rules or -r:
use CrawlSpider rules to discover the callback (i.e. spider method) to use for parsing the response
使用 CrawlSpider 规则来发现用来解析返回(response)的回调函数

--noitems:
don’t show scraped items
不显示爬取到的 item

--nolinks:
don’t show extracted links
不显示提取到的链接

--nocolour:
avoid using pygments to colorize the output
避免使用 pygments 对输出着色

--depth or -d:
depth level for which the requests should be followed recursively (default: 1)
指定跟进链接请求的层次数(默认:1)

--verbose or -v:
display information for each depth level
显示每个请求的详细信息

bench

这个命令会运行 benchmark 测试,模拟测试scrapy的爬取速度。

version

这个命令可以查询当前scrapy的版本,和一些依赖库版本信息。

示例:

➜  ~ scrapy version
Scrapy 1.8.0

➜  ~ scrapy version -v
Scrapy       : 1.8.0
lxml         : 4.5.0.0
libxml2      : 2.9.10
cssselect    : 1.1.0
parsel       : 1.5.2
w3lib        : 1.21.0
Twisted      : 19.10.0
Python       : 3.8.0 (v3.8.0:fa919fdf25, Oct 14 2019, 10:23:27) - [Clang 6.0 (clang-600.0.57)]
pyOpenSSL    : 19.1.0 (OpenSSL 1.1.1d  10 Sep 2019)
cryptography : 2.8
Platform     : macOS-10.14.6-x86_64-i386-64bit

免费评分

参与人数 6吾爱币 +6 热心值 +5 收起 理由
扛煤气罐的爷们 + 1 用心讨论,共获提升!
.YIEB + 1 + 1 谢谢@Thanks!
齐大庆 + 1 + 1 热心回复!
zhyerh + 1 + 1 谢谢@Thanks!
Tandgers + 1 + 1 我很赞同!
む人生似梦 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yao5201478 发表于 2020-2-20 16:45
赞一个!!!!
Tandgers 发表于 2020-2-20 16:56
miqi1314 发表于 2020-2-20 16:57
猎心GY 发表于 2020-2-20 17:01
学到了新知识,我正在学,处于入门阶段。这很有帮助
独醉的过客 发表于 2020-2-20 17:12
受教受教!收藏!
GESINTEL 发表于 2020-2-20 18:27
做笔记是个好习惯
Aim灬血饮 发表于 2020-2-21 07:39
看看see.
huabing19 发表于 2020-2-21 08:21
看看加看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 21:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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