zoukankan      html  css  js  c++  java
  • scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

    scrapy——4

    1. 常用的反爬虫策略有哪些
    2. 怎样使用logging设置
    3. Resquest/Response重要参数有哪些
    4. Scrapy怎么发送POST请求

    • 动态的设置User-Agent(随即切换User-Agent,模拟不同的用户的浏览器信息)
    • 禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies的使用发现爬虫行为)可以通过COOKIES_ENABLED控制CookiesMiddleware开启或关闭
    • 设置延迟下载(防止访问过于频繁,设置为2秒或者更高)
    • Google Cache 和 BaiduCache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获取页面数据。
    • 使用Ip地址池:;VPN和代理IP,现在大部分网站都是根据IP来反爬的

     Log levels——Scrapy提供5层loggin等级:

    • CRITICAL - 严重错误(critical)
    • ERROR - 一般错误(regular errors)
    • WARNING - 警告信息(warning messages)
    • INFO - 一般信息(informational messages)
    • DEBUG - 调试信息(debugging messages)

    logging设置:

    通过在setting.py中进行以下设置可以被用来配置logging:

    • LOG_ENABLED 默认: True,启用logging
    • LOG_ENCODING 默认: 'utf-8',logging使用的编码
    • LOG_FILE 默认: None,在当前目录里创建logging输出文件的文件名
    • LOG_LEVEL 默认: 'DEBUG',log的最低级别
    • LOG_STDOUT 默认: False 如果为 True,进程所有的标准输出(及错误)将会被重定向到log中。例如,执行 print "hello" ,其将会在Scrapy log中显示。
    • 在尝试运行代码时,这样输入  scrapy crawl xxxx --nolog  输出时不会弹出logging信息

     

    • url: 就是需要请求,并进行下一步处理的url

    • callback: 指定该请求返回的Response,由那个函数来处理。
    • method: 请求一般不需要指定,默认GET方法,可设置为"GET", "POST", "PUT"等,且保证字符串大写
    • headers: 请求时,包含的头文件。一般不需要
    • meta: 比较常用,在不同的请求之间传递数据使用的。字典dict型
    • encoding: 使用默认的 'utf-8' 就行。
    • dont_filter: 表明该请求不由调度器过滤。这是当你想使用多次执行相同的请求,忽略重复的过滤器。默认为False。

    • status: 响应码
    • _set_body(body): 响应体
    • _set_url(url):响应url

     

    实战—    豆瓣登陆

    •  先创建项目

    • douban_loginsettings.py    设置请求头以及你的账号和密码(setting中)

    • douban_loginspidersdouban_spider.py    写代码
      # -*- coding: utf-8 -*-
      import scrapy
      from ..settings import username, password
      
      
      class DoubanSpiderSpider(scrapy.Spider):
          name = 'douban_spider'
          allowed_domains = ['douban.com']
          start_urls = ['https://accounts.douban.com/login']
      
          def start_requests(self):
              data = {    # POST请求多要携带的数据,由formdata传递
                  'source': 'index_nav',
                  'form_email': username,
                  'form_password': password,
              }   
              yield scrapy.FormRequest(url=self.start_urls[0], formdata=data, callback=self.login_after)
      
          def login_after(self, response):
              print(response.url)
              user = response.xpath('//a[@class="bn-more"]/span/text()').extract_first() # 获取用户姓名,方便确认登陆是或否成功
      
              print('当前用户:%s'%user)
      
      
      '''
      douban_login$ scrapy crawl douban_spider --nolog
      https://www.douban.com/
      当前用户:pywjh的帐号
      '''

    实战二——gethub登陆

     方法雷同,在setting中设置用户名和密码,需要注意的是,gethub有一个令牌的反爬措施,需要get请求一个登陆页面获取令牌,再POST请求登陆

    # -*- coding: utf-8 -*-
    from ..settings import username, password
    
    import scrapy
    
    
    class GithubSpider(scrapy.Spider):
        name = 'github'
        allowed_domains = ['github.com']
        start_urls = ['https://github.com/login']
    
        def parse(self, response):
            token = response.xpath("//input[@name='authenticity_token']/@value").extract_first()
            data = {
                'utf8': '',
                'authenticity_token': token,
                'login': username,
                'password': password,
                'commit': 'Sign in',
            }
            yield  scrapy.FormRequest(
                url='https://github.com/session',
                formdata=data,
                callback=self.parse_item)
    
        def parse_item(self,response):
            name = response.xpath('//*[@id="user-links"]/li[3]/details/summary/img/@alt').extract_first().replace('@', '')
            print('当前用户:%s'%name)
  • 相关阅读:
    每周学算法/读英文/知识点心得分享 1.28
    ARTS 1.21
    ARTS 1.14
    ARTS 1.7
    ARTS 12.31
    ARTS 12.24
    Leetcode : Median of Two Sorted Arrays
    我是怎样改善遗留系统的
    《大话重构》免费送书活动开始啦
    我的新书终于要出来啦
  • 原文地址:https://www.cnblogs.com/pywjh/p/9942581.html
Copyright © 2011-2022 走看看