ScrapySpider的使用

设置控制台打印的Log等级

# setings文件

# 设置只打印warning以上等级的日志信息
LOG_LEVEL = 'WARNING'

在在爬虫主文件写爬取代码,使用scrapy.Request请求。

2019-08-25_20-16-04

# baiduSpider.py文件

import scrapy
from spiderDM.items import SpiderdmItem


class BaiduspiderSpider(scrapy.Spider):
    name = 'baiduSpider'
    allowed_domains = ['www.baidu.com']

    # start_urls = ['http://www.baidu.com/']

    # 和start_urls功能相似,是程序开始执行的方法。
    def start_requests(self):
        url = "http://www.baidu.com"

        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
        }

        cookies = {
            "cookie": "_zap=14ce0193-6056-4233-a292-697015b7845f"
        }

        item = {"data": "information"}

        yield scrapy.Request(
            url=url,  # 请求的URL
            method="GET",  # 请求的方式,默认GET
            headers=headers,  # 请求头携带信息
            meta=item,  # 需要携带给回调函数的数据
            dont_filter=False,  # 是否筛选这个URL,默认False
            callback=self.parse  # 设置回调函数(下一个执行的函数)
        )

    def parse(self, response):
        # 创建item对象
        item = SpiderdmItem()

        # 获取meta里的数据;注意:获取的是浅度拷贝(复制数据的引用地址),注意后面操作对值的覆盖。深度复制:deepcopy
        item["data"] = response.meta["data"]
        print(item["data"])

        # 发送数据给管道
        # yield item

运行爬虫结果

2019-08-25_20-18-17

使用scrapy.FormRequest请求。

# baiduSpider.py文件

import scrapy
from spiderDM.items import SpiderdmItem


class BaiduspiderSpider(scrapy.Spider):
    name = 'baiduSpider'
    allowed_domains = ['www.baidu.com']

    # start_urls = ['http://www.baidu.com/']

    # 和start_urls功能相似,是程序开始执行的方法。
    def start_requests(self):
        url = "http://www.baidu.com"

        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
        }

        cookies = {
            "cookie": "_zap=14ce0193-6056-4233-a292-697015b7845f"
        }

        item = {"data": "information"}

        yield scrapy.FormRequest(
            url=url,  # 请求的URL
            headers=headers,  # 请求头
            formdata=dict(  # 请求网页时发送的数据
                userName="make",
                passWord="make"
            ),
            meta=item, # 携带给回调函数的数据
            callback=self.parse,  # 回调函数
        )

    def parse(self, response):
        # 创建item对象
        item = SpiderdmItem()

        # 获取meta里的数据
        item["data"] = response.meta["data"]
        print(item["data"])

        # 发送数据给管道
        # yield item

运行结果相同。

两种请求方式的应用场景

scrapy.Request:主要应用GET网页数据时应用。

scrapy.FormRequest:主要应用发送POST来获取数据和登录时应用。

原文地址:https://www.cnblogs.com/studyNotesSL/p/11409557.html