一.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. 最大值最小值(max,max_element)

    min 如果比不出大小就返回第一个引数 //版本一:调用operator< template <class LessThanComparable> const LessThanCom ...

  2. Eclipse之父、《设计模式》作者、Junit作者之Erich Gamma

    Erich Gamma拥有多重权威身份.他是Jazz项目的主要领导人:是Eclipse的项目管理委员会成员,被业界称为“Eclipse之父”: 是经典书<设计模式>的作者四人帮之一,199 ...

  3. windows下搭建voip服务器

    软件: yate-6.0.0-1-setup.exe 服务端,里面也有个客户端 eyeBeam.exe 客户端 步骤: 失败....

  4. hdfs 例子

    package hadoop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; ...

  5. pyquery的使用

    常用的三种初始化方法: 1.字符串初始化: from pyquery import PyQuery as pq html=""" <html> <hea ...

  6. TP5 中引入第三方类库

    通过了解tp5的目录结构,我们知道其中有两个目录是纺织扩展类库文件的. extend是放置自定义或者其他类文件的. vendor目录是放置composer类库文件的. 当我们的第三方类库文件是下载的, ...

  7. php调用C#生成的dll(二)

    根据上一篇博文,php调用c#生成的动态库,运行测试时报Fatal error: Class 'COM' not found in XXXXXXXXX 原因是php.ini中未开启COM组件的应用,解 ...

  8. RedHat无法ping通Win10的解决办法

    1.环境 主机: win10 企业版 64位 ip地址: 192.168.168.100 虚拟机:Red Hat ip地址: 192.168.168.200 2.现象: win10系统可以ping通R ...

  9. [转]happybase1.0 报错:ThriftPy does not support generating module with path in protocol 'f'

    happybase1.0 报错:ThriftPy does not support generating module with path in protocol 'f' 2016-10-12 14: ...

  10. PByte和PChar的关系

    作为指针是相同的, 解析的内容,稍微有点区别. var s:String;P:PChar;B:PByte;a:Integer;begin  s:='1234';  P:=PChar(s);//按chr ...