一.Scrapy的日志等级

  - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息。

  - 日志信息的种类:

        ERROR : 一般错误

        WARNING : 警告

        INFO : 一般的信息

        DEBUG : 调试信息

       

  - 设置日志信息指定输出:

    在settings.py配置文件中,加入

LOG_LEVEL = ‘指定日志信息种类’即可。

LOG_FILE = 'log.txt'则表示将日志信息写入到指定文件中进行存储。

二.请求传参

  - 在某些情况下,我们爬取的数据不在同一个页面中,例如,我们爬取一个电影网站,电影的名称,评分在一级页面,而要爬取的其他电影详情在其二级子页面中。这时我们就需要用到请求传参。

  - 案例展示:爬取www.id97.com电影网,将一级页面中的电影名称,类型,评分一级二级页面中的上映时间,导演,片长进行爬取。

  爬虫文件:

# -*- coding: utf-8 -*-

import scrapy

from moviePro.items import MovieproItem

class MovieSpider(scrapy.Spider):

    name = 'movie'

    allowed_domains = ['www.id97.com']

    start_urls = ['http://www.id97.com/']

    def parse(self, response):

        div_list = response.xpath('//div[@class="col-xs-1-5 movie-item"]')

        for div in div_list:

            item = MovieproItem()

            item['name'] = div.xpath('.//h1/a/text()').extract_first()

            item['score'] = div.xpath('.//h1/em/text()').extract_first()

            #xpath(string(.))表示提取当前节点下所有子节点中的数据值(.)表示当前节点

            item['kind'] = div.xpath('.//div[@class="otherinfo"]').xpath('string(.)').extract_first()

            item['detail_url'] = div.xpath('./div/a/@href').extract_first()

            #请求二级详情页面,解析二级页面中的相应内容,通过meta参数进行Request的数据传递

            yield scrapy.Request(url=item['detail_url'],callback=self.parse_detail,meta={'item':item})

    def parse_detail(self,response):

        #通过response获取item

        item = response.meta['item']

        item['actor'] = response.xpath('//div[@class="row"]//table/tr[1]/a/text()').extract_first()

        item['time'] = response.xpath('//div[@class="row"]//table/tr[7]/td[2]/text()').extract_first()

        item['long'] = response.xpath('//div[@class="row"]//table/tr[8]/td[2]/text()').extract_first()

        #提交item到管道

        yield item

items文件:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items

# See documentation in:

# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class MovieproItem(scrapy.Item):

    # define the fields for your item here like:

    name = scrapy.Field()

    score = scrapy.Field()

    time = scrapy.Field()

    long = scrapy.Field()

    actor = scrapy.Field()

    kind = scrapy.Field()

    detail_url = scrapy.Field()

管道文件:

# -*- coding: utf-8 -*-

# Define your item pipelines here

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import json

class MovieproPipeline(object):

    def __init__(self):

        self.fp = open('data.txt','w')

    def process_item(self, item, spider):

        dic = dict(item)

        print(dic)

        json.dump(dic,self.fp,ensure_ascii=False)

        return item

    def close_spider(self,spider):

        self.fp.close()

三、cookie

豆瓣网个人登录,获取该用户个人主页这个二级页面的页面数据。

如何发起post请求?

一定要对start_requests方法进行重写。

  1. Request()方法中给method属性赋值成post
  2. FormRequest()进行post请求的发送
# -*- coding: utf-8 -*-
import scrapy class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['www.douban.com']
start_urls = ['https://accounts.douban.com/j/mobile/login/basic'] # 重写start_requests方法
def start_requests(self):
# 将请求参数封装到字典
data = {
'ck': '',
'name': 'username',
'password': 'passwd',
'remember': 'false',
'ticket': '',
}
for url in self.start_urls:
yield scrapy.FormRequest(url=url, formdata=data, callback=self.parse) # 针对个人主页页面数据进行解析操作
def parseBySecondPage(self, response):
fp = open('second.html', 'w', encoding='utf-8')
fp.write(response.text) # 可以对当前用户的个人主页页面数据进行指定解析操作 def parse(self, response):
# 登录成功后的页面数据进行存储
fp = open('main.html', 'w', encoding='utf-8')
fp.write(response.text) # 获取当前用户的个人主页
url = 'https://www.douban.com/people/1xxxxxxxxx/'
yield scrapy.Request(url=url, callback=self.parseBySecondPage)

四、 代理:

下载中间件作用:拦截请求,可以将请求的ip进行更换。

流程:

  1. 下载中间件类的自制定

a) object

b) 重写process_request(self,request,spider)的方法

  1. 配置文件中进行下载中间价的开启。

daili.py

class DailiSpider(scrapy.Spider):
name = 'daili'
# allowed_domains = ['www.baidu.com']
start_urls = ['https://www.baidu.com/s?wd=ip'] def parse(self, response):
fp = open('proxy.html', 'w', encoding='utf-8')
fp.write(response.text)

middlewares.py

from scrapy import signals

class MyProxy(object):
def process_request(self, request, spider):
# 请求ip的更换
request.meta['proxy'] = "http://201.245.172.157:80"

settings.py

DOWNLOADER_MIDDLEWARES = {
'proxyDemo.middlewares.MyProxy': 543,
}

scrapy框架之日志等级和请求传参-cookie-代理的更多相关文章

  1. scrapy框架的日志等级和请求传参, 优化效率

    目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使 ...

  2. 13.scrapy框架的日志等级和请求传参

    今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是s ...

  3. scrapy框架的日志等级和请求传参

    日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...

  4. 爬虫开发10.scrapy框架之日志等级和请求传参

    今日概要 日志等级 请求传参 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志 ...

  5. Scrapy框架之日志等级和请求传参

    一.Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 1.日志等级(信息种类) ERROR:错误 WARN ...

  6. 13,scrapy框架的日志等级和请求传参

    今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy ...

  7. 12 Scrapy框架的日志等级和请求传参

    一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...

  8. scrapy框架post请求发送,五大核心组件,日志等级,请求传参

    一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...

  9. Scrapy的日志等级和请求传参

    日志等级 日志信息:   使用命令:scrapy crawl 爬虫文件 运行程序时,在终端输出的就是日志信息: 日志信息的种类: ERROR:一般错误: WARNING:警告: INFO:一般的信息: ...

随机推荐

  1. ADB连接手机的两种方式(usb数据线连接和wifi连接)

    ADB(Android Debug Bridge)安卓测试桥,它是连接电脑开发端和安卓设备的桥梁,这个安卓设备可以是真实的安卓手机或者平板,也可以是虚拟的安卓模拟器,   这里介绍ADB连接手机的两种 ...

  2. python 调试之assert and logging

    断言 assert assert后面跟的表达式应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错. 如果断言失败,会抛出AssertionError def foo(s): n = int ...

  3. MYSQL之 GroupCommit

    组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题.组提交伴随着MYSQL的发展不断优化,从最初只支持redo log 组提交,到目前5.6官方 ...

  4. RSA 加密算法 Java 公钥加密私钥解密 和 私钥加密公钥解密 的特点

    package com.smt.cipher.unsymmetry; import org.apache.commons.codec.binary.Base64; import org.apache. ...

  5. beanshell获取响应结果数据

    http://blog.csdn.net/lluozh2015/article/details/72834014 [Jmeter]BeanShell断言--数据处理 标签: jmeter 2017-0 ...

  6. JMeter ----与WebDriver安装与测试

    JMeter ----与WebDriver安装与测试 主要内容 JMeter安装 WebDriver安装 一个简单的JMeter+WebDriver示例 环境与参考 jvm版本: 1.8.0_65 j ...

  7. ecstore-ftp设置,不能上传文件

    某些主机居然不能上传,ftp改成127.0.0.1即可 ftp地址改成127.0.0.1即可...

  8. 使用PHPMAILER实现PHP发邮件功能

    第一步: 打开网址https://github.com/PHPMailer/PHPMailer/ 下载PHPMailer,PHPMailer 需要 PHP 的 sockets 扩展支持,而登录 QQ ...

  9. ubuntu base make 未找到命令

    引用:https://blog.csdn.net/fenglibing/article/details/7096556 1.先放入UBUNTU安装盘到光盘中: 2.再按顺序执行以下的命令: sudo ...

  10. 宝塔linux面板运行jsp文件的配置工作

    第一步宝塔安装和软件安装我们先安装宝塔面板(这个不需要我说咋弄吧) 安装完成后登录到宝塔面板然后安装软件我个人喜欢nginx最新版,mysql由于服务器配置很菜所以没发装56,php什么的我用不到就没 ...