【笔记】慕课-Python网络爬虫与信息提取-Scrapy框架(2)

Scrapy命令行格式

 > scrapy <command>[options][args]
命令行更好自动化,适合脚本控制
Scrapy的具体命令

[options]
[args]

Scrapy的常用命令:

startproject
scrapy startproject [dir]
创建一个新工程

genspider
scrapy genspider [options]
创建一个爬虫

settings
scrapy settings [options]
获得爬虫配置信息

crawl
scrapy crawl
运行一个爬虫

list
scrapy list
列出工程中的所有爬虫

shell
scrapy shell [url]
启动一个shell,运行URL调试命令行

Scrapy爬虫产生步骤

1、在指定目录下使用命令行创建一个Scrapy爬虫工程
scrapy startproject test1
#创建一个新工程,命名为test1

外层目录:test1/

	部署Scrapy爬虫的配置文件:scrapy.cfg

	Scrapy框架的用户自定义Python代码:test1/

		初始化脚本:__ init __.py

		Items类的代码模板(继承类):items.py

		Middlewares对应的代码模板(继承类):middlewares.py

		Pipelines代码模块(继承类):pipelines.py

		Scrapy爬虫的配置文件:settings.py

		Spiders代码模板目录(继承类):spiders/

			初始文件,无需修改:__ init __ .py

			缓存目录,无须修改,一开始没有:__ pycache __/

2、在工程中产生一个Scrapy爬虫
cd test1
#进入test1工程中,注意:Cannot create a spider with the same name as your project

scrapy genspider test <domain>.io
#生成一个命名为test的spider,且只能爬取域名为.io的网站
比如:scrapy genspider test home.firefoxchina.io

在Spiders代码模板目录(继承类):spiders/目录下产生了一个test.py文件
test.py中的内容:

import scrapy

class TestSpider(scrapy.Spider):
#面向对象的方式编写了一个叫TestSpider的类,继承于scrapy.Spider这个类的子类
	name = 'test'	#当前爬虫的名字
    allowed_domains = ['home.firefoxchina.io']		#用户提交给命令行的域名,爬虫爬取网站时只能爬取这个域名以下的相关链接
    start_urls = ['http://home.firefoxchina.io/']	#以列表形式包含的一个或多个url就是Scrapy框架所要爬取的初始页面

    def parse(self, response):		#解析空页面的空的方法,parse用于处理响应并解析内容形成字典,发现其中隐含的新的URL爬取请求
        #self 面向对象类所属关系的标记;response 相当于从网络中返回内容所存储或对于的对象
		pass

3、配置产生的spider爬虫
修改test.py文件

简化版:

import scrapy

class TestSpider(scrapy.Spider):
    name = 'test'
    #allowed_domains = ['home.firefoxchina.io']
    #start_urls = ['http://home.firefoxchina.io/']
    start_urls = ['http://python123.io/ws/demo.html']

    def parse(self, response):		#对返回的页面进行解析并操作
        fname=response.url.split('/')[-1]
        with open(fname,'wb')as f:
           f.write(response.body)
        self.log('Saved file %s.' % fname)  

完整版:

import scrapy

class TestSpider(scrapy.Spider):
    name = 'test'
	
	def start_requests(self)	#将一个命令拓展成一个方法
		urls=
		[
			'http://python123.io/ws/demo.html'
		]
		for url in urls:
			yield scrapy.Request(url=url,callback=self.parse)
			#使用生成器,每次只提交列表中的一个url请求

    def parse(self, response):	
        fname=response.url.split('/')[-1]
        with open(fname,'wb')as f:
           f.write(response.body)
        self.log('Saved file %s.' % fname)  

4、运行爬虫
scrapy crawl test

yield关键字

生成器:不断产生值的函数
包含yield语句的函数是一个生成器
生成器每次产生一个值(yield语句)时函数会被冻结,被唤醒后从被冻结位置继续执行,再产生一个值

生成器写法

def gen(n):
	for i in range(n)
		yield i**2
#能够产生小于n的所有整数的平方值
#在调用该函数的时候,会首先产生当i=0时的值的平方值,然后遍历循环,每次返回一个值

for i in gen(5)
	print (i," ",end="")

普通写法:

def square(n):
	ls=[i**2 for i in range(n)]
	return ls
#计算出所有可能的值并以列表的形式返回所有的值

for i in square(5)
	print (i," ",end="")

生成器的优势:
更节省存储空间
相应更迅速
使用更灵活

Scrapy爬虫的使用步骤

1、创建一个工程和Spider模板
2、编写Spider
3、编写Item Pipeline
4、优化配置策略

Scrapy爬虫的数据类型
Request类

代表向网络上提交请求的内容
class scrapy.http.Request()
Request对象表示一个HTTP请求
由Spider生成,由Downloader执行

属性或方法:
.url Request对应的请求URL地址
.method 对应的请求方法,‘GET’、'POST’等
.headers字典类型风格的请求头,可以对访问网站请求的http的头部进行自定义
.body 请求内容主题,字符串类型
.meta 用户添加的拓展信息,在Scrapy内部模块间传递信息使用
.copy() 复刻该请求

Response类

表示从网络中爬取内容的封装类和item类
class scrapy.http.Response()
Response对象表示一个HTTP响应
由Downloader生成,由Spider处理

属性或方法:
.url Response对应的URL地址
.status HTTP状态码,默认是200(返回信息成功接收)
.headers 对应的头部信息
.body 对应的内容信息,字符串类型
.flags 一组标记
.request 产生Response类型对应的Request对象
.copy() 复制该响应

Item类

由spider产生的信息封装的类
class scrapy.http.Item()
Item对象表示一个从HTML页面中提取的信息内容
由Spider生成,由Item Pipeline处理
Item类似字典类型,可以按照字典类型操作

spider用来解析html页面的方法:
Beautiful Soup
lxml
re
XPath Selector
CSS Selector

CSS Selector的基本使用

<HTML>.css('a::attr(href)').extract()
通过输入标签名称’a’和标签属性’href’来获得对应的标签信息,不用再import requests库了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值