scrapy爬虫框架
命令行格式:scrapy<command>[option][args]
常用命令:
全局命令
startproject
语法: scrapy startproject <project_name>[dir]
这个命令是 scrapy最为常用的命令之一,它将会在当前目录下创建一个名为 <project_name>的项目。
settings
语法: scrapy settings [options]
该命令将会输出Scrapy默认设定,当然如果你在项目中运行这个命令将会输出项目的设定值。
runspider
语法: scrapy runspider <spider_file.py>
在未创建项目的情况下,运行一个编写在Python文件中的spider。
shell
语法: scrapy shell [url]
以给定的URL(如果给出)或者空(没有给出URL)启动Scrapy shell。
例如,scrapy shell http://www.baidu.com将会打开百度URL,
并且启动交互式命令行,可以用来做一些测试。
fetch
语法: scrapy fetch <url>
使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出。简单的来说,就是打印url的html代码。
view
语法: scrapy view <url>
在你的默认浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不相同,一些动态加载的内容是看不到的, 因此该命令可以用来检查spider所获取到的页面。
version
语法: scrapy version [-v]
输出Scrapy版本。配合 -v 运行时,该命令同时输出Python, Twisted以及平台的信息。项目命令
crawl
语法: scrapy crawl <spider_name>
使用你项目中的spider进行爬取,即启动你的项目。这个命令将会经常用到,我们会在后面的内容中经常使用。
check
语法: crapy check [-l] <spider>
运行contract检查,检查你项目中的错误之处。
list
语法: scrapy list
列出当前项目中所有可用的spider。每行输出一个spider。
genspider
语法: scrapy genspider [-t template] <name> <domain>
在当前项目中创建spider。该方法可以使用提前定义好的模板来生成spider。您也可以自己创建spider的源码文件。
以爬取http://python123.io/ws/demo.html即http://python123.io的子页面为例
- 创建一个爬虫的工程:Cmd->scrapy startproject python123demo
- 在工程中产生一个scrapy爬虫:cd python123demo->scrapy genspider demo python123.io
- 配置产生的spider爬虫:修改start_urls中的链接为 http://python123.io/ws/demo.html ->更改爬取方法(demo.py文件)的具体功能
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider): #继承类
name = 'demo'
# allowed_domains = ['python123.io'] #提交给命令行的主域名,不需要
start_urls = ['http://python123.io/ws/demo.html'] #scapy框架要爬取的初始页面
def parse(self, response): #解析页面的空方法,parse()用于处理相应,解析内容形成字典,发现新的URL爬取请求
fname = response.url.split('/')[-1]
with open(fname,'wb') as f: #爬取网页并将其保存为一个名为fname的HTML文件
f.write(response.body)
self.log('saved file %s.'% name)
pass
- 运行爬虫:scrapy crawl demo
- yield生成器:不断产生值的函数,每次产生一个值,函数被冻结,被唤醒后再产生一次
- scrapy爬虫的使用步骤:
A.创建一个工程和spider模板 B.编写spider C.编写ItemPipeline D.配置优化策略
2.1爬虫三个数据类型:
Request类:
Reaponse类:
Item类:
3.CSS selector的基本使用:<HTML>.css(‘a::attr(href)’).extract()