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框架——scrapy框架的安装和结构介绍