《Python网络爬虫与信息提取》第四周 网络爬虫之框架 学习笔记(二)Scrapy爬虫基本使用

目录

二、Scrapy爬虫基本使用

1、Scrapy爬虫的第一个实例

(1)演示HTML地址

(2)产生步骤

(3)小结

2、yield关键字的使用

(1)yield关键字

(2)实例

(3)为何要有生成器?

3、Scrapy爬虫的基本使用

(1)Scrapy爬虫的使用步骤

(2)Scrapy爬虫的数据类型

(3)Scrapy爬虫提取信息的方法

(4)CSS Selector的基本使用


二、Scrapy爬虫基本使用

1、Scrapy爬虫的第一个实例

(1)演示HTML地址

演示HTML页面地址:http://python123.io/ws/demo.html

文件名称:demo.html。

(2)产生步骤

步骤1:建立一个Scrapy爬虫工程

管理员权限启动cmd。

输入:

scrapy startproject python123demo

生成的工程目录:

python123demo/
        scrapy.cfg
        python123demo/
                __init__.py
                items.py

                middlewares.py
                pipelines.py
                settings.py
                spiders/
                        __init__.py
                        __pycache__/

外层目录
部署Scrapy爬虫的配置文件
Scrapy框架的用户自定义Python代码
初始化脚本
Items代码模板(继承类)

Middlewares代码模板(继承类)
Pipelines代码模板(继承类)
Scrapy爬虫的配置文件
Spiders代码模板目录(继承类)
初始文件,无需修改
缓存目录,无需修改

步骤2:在工程中产生一个Scrapy爬虫

管理员权限启动cmd。

输入:

cd python123demo
scrapy genspider demo python123.io

该命令作用:生成一个名称为demo的spider;在spiders目录下增加代码文件demo.py。

该命令仅用于生成demo.py,该文件也可以手工生成。

demo.py文件:

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


class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/']

    def parse(self, response):
        pass
# parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求。

步骤3:配置产生的spider爬虫

配置:初始URL地址;获取页面后的解析方式。

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


class DemoSpider(scrapy.Spider):
    name = 'demo'
    # allowed_domains = ['python123.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)
# parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求。

步骤4:运行爬虫,获取网页

管理员权限启动cmd。

输入:

scrapy crawl demo

demo爬虫被执行,捕获页面存储在demo.html。

(3)小结

①回顾demo.py代码:

import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    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)

②demo.py代码的完整版本:

# demo.py代码的完整版本
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'

    def start_requests(self):
        urls = [
                    'http://python123.io/ws/demo.html'
                ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    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)

③demo.py两个等价版本的区别:

yield scrapy.Request(url=url, callback=self.parse)

2、yield关键字的使用

(1)yield关键字

yield↔生成器。

生成器是一个不断产生值的函数。

包含yield语句的函数是一个生成器。

生成器每一次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。

(2)实例

①生成器写法:

# 生成器写法
def gen(n):
    for i in range(n):
        yield i ** 2


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="")

(3)为何要有生成器?

生成器相比一次列出所有内容的优势:更节省存储空间;响应更加迅速;使用更灵活。

如果n=1M、10M、100M或更大呢?

# 为何要有生成器?


def square(n):
    ls = [i ** 2 for i in range(n)]
    return ls


def gen(n):
    for i in range(n):
        yield i ** 2

3、Scrapy爬虫的基本使用

(1)Scrapy爬虫的使用步骤

步骤1:创建一个工程和Spider模板。

步骤2:编写Spider。

步骤3:编写Item Pipeline。

步骤4:优化配置策略。

(2)Scrapy爬虫的数据类型

Request类;Response类;Item类。

①Request类:

class scrapy.http.Request()。

Request对象表示一个HTTP请求;由Spider生成,由Downloader执行。

属性或方法 说明
.url Request对应的请求URL地址
.method 对应的请求方法,‘GET’ ‘POST’等
.headers 字典类型风格的请求头
.body 请求内容主体,字符串类型
.meta 用户添加的扩展信息,在Scrapy内部模块间传递信息使用
.copy() 复制该请求

②Response类:

class scrapy.http.Response()。

Response对象表示一个HTTP响应;由Downloader生成,由Spider处理。

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

③Item类:

class scrapy.item.Item()。

Item对象表示一个从HTML页面中提取的信息内容;由Spider生成,由Item Pipeline处理;Item类似字典类型,可以按照字典类型操作。

(3)Scrapy爬虫提取信息的方法

Scrapy爬虫支持多种HTML信息提取方法。

①Beautiful Soup。

②lxml。

③re。

④XPath Selector。

⑤CSS Selector。

(4)CSS Selector的基本使用

使用格式:

<HTML>.css('a::attr(href)').extract()

①a:标签名称。

②href:标签属性。

CSS Selector由W3C组织维护并规范。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章