scrapy框架-- request

1.Scrapy 介绍

(1)Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据

(2)特点:数据结构化、分布式

 

2.Scrapy 安装

2.1安装步骤

2.1.1 安装依赖包

2.1.1.1安装lxml

pip install lxml

2.1.1.2安装Twisted

(1)安装wheel:pip3 install wheel

(2)下载Twisted包

①下载链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/

②下载后,打开下载文件的目录,打开cmd

输入:pip3 install Twisted-18.7.0-cp35-cp35m-win_amd64.whl

2.1.2 安装scrapy

(1)安装:pip install scrapy

(2)当我们安装好scrapy,并且有配置scrapy的环境变量(D:\python3.5.4\Scripts),假如之前配过就不用配了

(3)如果配置好之后,在命令行敲scrapy会有一下反应

3.Scrapy 基本命令与结构

3.1 基本命令

3.1.1 查看版本

 

3.1.2 创建项目

 

3.2结构

3.2.1 爬虫项目结构

3.2.2 爬虫结构

Scrapy是python编写的框架,类里面规则和python的一样

4.Scrapy爬虫步骤

4.1新建爬虫文件

4.2编写爬取代码(简单)
 

# coding:utf-8
import scrapy
class TestSpider(scrapy.spiders.Spider):
    '''
    TestSpider 我们定义的爬虫类
    scrapy.spiders.Spider 是scrapy定义好的爬虫
    '''

    # 定义爬虫的名称,需唯一
    name = "baiduSpider"

    # 允许爬取的范围
    allowed_domains = [
        "https://www.baidu.com/"
    ]

    # 默认爬取的起始点
    start_urls = [
        "https://www.baidu.com"
    ]

    def parse(self,response):
        '''
        scrapy 会自动调用downloader的下载器,当请求成功scapy会自动调用parse,
        将结果返回到parse的response参数上
        '''
        # 调试方法在是scrapy当中可以代替print
        self.log(response.body.decode())

4.3创建启动文件

 

4.4 编写执行代码

4.5 settings设置

4.5.1 Scrapy默认请求头配置

找到HEADERS,取消注释,并添加上“UA”信息

4.5.2 设置不启动机器人协议

 

4.6 执行启动文件

4.6.1 执行后报错处理

提示:需安装win32的库

(1)下载对应python版本的win32的库

下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/

(2)下载后点击安装后重新启动。成功爬取

5.Scrapy 请求处理

假如我们只是爬一个百度这样写是没有问题的,但是如果爬小说网站,请求头有变化,那么我们刚才配置默认请求头就不够用了,所以我们需要配置自己的请求头信息。(settings中的HEADERS重新注释掉)

5.1 生成器

(1)python 2.4版本之后更新出来的语法糖,可以很高效的减少程序内存损耗

Python2 : xrange

Python3  :  range

(2)正常函数

使用return返回值,在调用函数时,输出相应的值

(3)yield函数

5.2 Request对象

在这里我们了解一个scrapy的request对象

首先request对象是由scrapy.Request方法创建

参数:

(1)url 请求的url
(2)callback=None 请求的回调函数,默认是parse
(3)method='GET', 请求的方式
(4)headers=None, 请求的头部
(5)body=None, 请求的正文,可以是bytes或者str
(6)cookies=None, 请求携带的cookie
(7)meta=None, 数是一个字典用于传递参数,这里可以带表单数据,也可以带代理如meta = {'proxy': 'xxx.xxxx.com:端口号'}
(8)encoding='utf-8', 字符集 url和body的字符集
(9)priority=0, 优先级,优先级越高,越先下载
(10)dont_filter=False, 是否对同一个url多次请求
(11)errback=None, 错误返回
(12)flags=None  标签

5.3代码部分

(1)代码

# coding:utf-8
import scrapy
from scrapy import Request
class TestSpider(scrapy.spiders.Spider):
    '''
    TestSpider 我们定义的爬虫类
    scrapy.spiders.Spider 是scrapy定义好的爬虫
    '''

    # 定义爬虫的名称,需唯一
    name = "baiduSpider"
    

# 继承并重写start_requests方法,定义url和headers
    def start_requests(self):
        url = "https://www.baidu.com/"
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
        }
        yield Request(url,headers=headers)

    def parse(self,response):
        '''
        scrapy 会自动调用downloader的下载器,当请求成功scapy会自动调用parse,
        将结果返回到parse的response参数上
        '''
        # 调试方法在是scrapy当中可以代替print
        self.log(response.body.decode())

(2)结果

5.4 补充说明

(1)运行代码后没有报错:

spider关键字出错

数据匹配出错

UA头重复使用次数过多

(2)排错,从Spoder opened开始查找,爬取到的信息、warn、error

(2)allowed_domains,允许爬取范围www.baidu.com; Request里的meta参数是一个字典用于传递参数,这里可以带表单数据,也可以带代理如meta = {'proxy': 'xxx.xxxx.com:端口号'}

猜你喜欢

转载自blog.csdn.net/qq_39620483/article/details/83040277