Python爬虫 scrapy -- scrapy 日志信息和日志等级scrapy shell的使用scrapy post请求

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫 scrapy -- scrapy 日志信息和日志等级scrapy shell的使用scrapy post请求相关的知识,希望对你有一定的参考价值。

1. scrapy 日志信息和日志等级


1.1 scrapy 日志级别

  • CRITICAL:严重错误
  • ERROR: 一般错误
  • WARNING: 警告
  • INFO: 一般信息
  • DEBUG: 调试信息

默认的日志等级是DEBUG,只要出现了DEBUG或者DEBUG以上等级的日志 那么这些日志将会打印。


1.2 创建项目测试

创建爬虫的项目

在目标目录终端输入:scrapy startproject 项目名称( 注意:项目的名字不允许使用数字开头 也不能包含中文)

我这里输入的是scrapy startproject 百度

创建爬虫文件:

             要在spiders文件夹中去创建爬虫文件
             cd 项目的名字\\项目的名字\\spiders

             创建爬虫文件
             scrapy genspider 爬虫文件的名字  要爬取网页
             eg:scrapy genspider baidu www.baidu.com
             一般情况下不需要添加http协议  因为start_urls的值是根据allowed_domains
             修改的  所以添加了http的话  那么start_urls就需要我们手动去修改了


baidu.py
一般情况下把allowed_domains和start_urls改为一样,因为后缀会.html的url加上/会报错

import scrapy


class BaiduSpider(scrapy.Spider):
    # 爬虫的名字  用于运行爬虫的时候 使用的值
    name = 'baidu'
    # 允许访问的域名
    allowed_domains = ['www.baidu.com']
    # 起始的url地址  指的是第一次要访问的域名
    # start_urls 是在allowed_domains的前面添加一个http://
    #             在 allowed_domains的后面添加一个/
    start_urls = ['http://www.baidu.com/']

    # 是执行了start_urls之后 执行的方法   方法中的response 就是返回的那个对象
    # 相当于 response = urllib.request.urlopen()
    #       response  = requests.get()
    def parse(self, response):
        print("百度")

运行爬虫代码:

                 scrapy crawl 爬虫的名字
                 eg:
                 scrapy crawl baidu

我们发现存在一个robots协议(这是一个君子约定,就是说你不可以爬百度)阻止我们继续访问:

在游览器输入https://www.baidu.com/robots.txt就可以查询百度的robots协议了。

关闭遵守robots协议(创建项目时 默认遵守)

再次运行:访问成功

可以看见,打印了许多的信息,看去来比较繁杂。


1.2 settings.py文件日志等级设置

默认的级别为DEBUG,会显示上面所有的信息。

在配置文件中 settings.py 中

  • LOG_LEVEL : 设置日志显示的等级,就是显示哪些,不显示哪些。

再次运行的结果,发现现在只有我们打印的信息。

  • LOG_FILE : 将屏幕显示的信息全部记录到文件中,屏幕不再显示,注意文件后缀一定是.log (推荐使用),上面那种做法太极端了,这样的话,出错了我们就不可以看到错误信息了,没办法去调试。

    再次运行的结果


2. scrapy shell的使用


2.1 什么是 scrapy shell ?

Scrapy终端,是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码。 其本意是用来测试提取 数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码。 该终端是用来测试XPath或CSS表达式,查看他们的工作方式及从爬取的网页中提取的数据。 在编写您的spider时,该终端提供了交互性测试您的表达式代码的功能,免去了每次修改后运行spider的麻烦。 一旦熟悉了Scrapy终端后,您会发现其在开发和调试spider时发挥的巨大作用。


2.2 安装ipython

  • 安装:pip install ipython

  • 简介:如果您安装了 IPython ,Scrapy终端将使用 IPython (替代标准Python终端)。 IPython 终端与其他相 比更为强大,提供智能的自动补全,高亮输出,及其他特性。

  • 如果想看到一些高亮 或者 自动补全 ,那么可以安装ipython。


2.3 scrapy shell的使用

  • 进入到scrapy shell的终端 :直接在window的终端中输入scrapy shell 域名

  • eg: scrapy shell www.baidu.com

语法:

eg:

tips:在scrapy shell中输入的时候,按tab键可以调出提示。


3. scrapy post请求

我们抓取百度翻译的这个请求。

现在把第一个项目的 baidu.py 的替换一下

import json

import scrapy


class BaiduSpider(scrapy.Spider):
    name = 'testpost'
    allowed_domains = ['https://fanyi.baidu.com/sug']

    # post请求 如果没有参数 那么这个请求将没有任何意义
    # 所以start_urls 也没有用了
    # parse方法也没有用了
    # start_urls = ['https://fanyi.baidu.com/sug/']
    #
    # def parse(self, response):
    #     pass

    def start_requests(self):
        url = 'https://fanyi.baidu.com/sug'

        data = 
            'kw': 'final'
        

        yield scrapy.FormRequest(url=url, formdata=data, callback=self.parse_second)

    def parse_second(self, response):
        content = response.text
        print(content)
        obj = json.loads(content)

        print(obj)

现在的运行结果:



以上是关于Python爬虫 scrapy -- scrapy 日志信息和日志等级scrapy shell的使用scrapy post请求的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫—使用scrapy爬虫框架

python爬虫随笔-scrapy框架——scrapy框架的安装和结构介绍

Python | 初识爬虫框架Scrapy

python爬虫scrapy之scrapy终端(Scrapy shell)

Python 爬虫-Scrapy爬虫框架

Python编程基础之(五)Scrapy爬虫框架