scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4

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

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

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

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

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信息

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

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

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

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

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

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

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

实战—    豆瓣登陆

  • 先创建项目

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

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

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

  • douban_login\spiders\douban_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)
上一篇:SVN提交出错--URL access forbidden for unknown reason


下一篇:【C#】添加鼠标管轮事件