關于Cookie的分析我在爬蟲筆記(六) - 關于 Cookie 的分析(Postman Request Selenium)中說明了,本次的目標網站也是同一個
本文主要包含一個要點,在分析完請求后,使用不同的方法構造同一個HTTP請求,方法包括:
- Scrapy框架
- Request庫
- Chrome的Postman插件
Scrapy中一段讓我揪心的代碼
在分析前,我說一個自己遇到過的SB問題,在最開始我只放代碼~~~
Scrapy中的spider
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request
class JobSpider(scrapy.Spider):
name = "job"
def start_requests(self):
base_url = "https://www.lagou.com/jobs/positionAjax.json"
querystring = {"city": "廣州", "needAddtionalResult": "false", "kd": "python", "pn": "1"}
headers = {
'user-agent': "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0",
'cookie': "user_trace_token=20170502200739-07d687303c1e44fa9c7f0259097266d6;"
}
yield Request(url=base_url, method="GET", headers=headers)
def parse(self, response):
print response
從Postman中獲取到的Request請求
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
# @Time : 2017/5/2 20:24
# @Author : Spareribs
# @File : test_lagou.py
"""
import requests
import json
url = "https://www.lagou.com/jobs/positionAjax.json"
querystring = {"city":"廣州","needAddtionalResult":"false","kd":"python","pn":"1"}
headers = {
'user-agent': "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0",
'cookie': "user_trace_token=20170502200739-07d687303c1e44fa9c7f0259097266d6;"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
如果看完這兩段代碼你看懂了關鍵點,本文最想突出的核心要點你也看懂了。
看不懂也不急,先看下基礎分析
Scrapy框架中的Request請求分析
首先是Request對象中文文檔
class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])
參數要點:
- url(必填):請求的URL,所說的目標網站
- method='GET'
- headers
- body
- cookies
Scrapy特有:
- encoding='utf-8'
- priority=0
- dont_filter=False
- meta:
- callback:
- errback:
(占位---待繼續更新)
Request庫中的Request請求分析
requests庫中requests的方法
def request(method, url, **kwargs):
with sessions.Session() as session:
return session.request(method=method, url=url, **kwargs)
def get(url, params=None, **kwargs):
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)
def post(url, data=None, json=None, **kwargs):
return request('post', url, data=data, json=json, **kwargs)
(占位---待繼續更新)
Chrome的Postman插件中的Request請求分析
對于Postman的請求,我這里分兩種Method分析(其他的爬蟲中很少用到)
- Get請求
- Post請求
首先是get請求
Postman中Get請求
要點:
- 請求的方法:Get
- 請求的URL
- 請求的Params參數
- 請求的Headers頭部
然后是Post請求
Postman中Post請求
要點:
- 請求的方法:Post
- 請求的URL
- 請求的Params參數
- 請求的Headers頭部
- Request Body(提供了4中編輯方式)
然而,在Post中的4種編輯方式分別為:
- form-data
- x-www-form-urlencoded
- raw
- binary
(占位---待繼續更新)
總結:其實我想了很久,一直沒想明白,為什么同一個請求放Request庫中成功了,而在scrapy中失敗了,對于這個問題,其實就是不是很難,就是越簡單越害人。Request庫的請求的Cookies是可以放到headers中可以辨別的,而Scrapy的Cookies有一個獨立的cookies參數來處理Cookie,放在headers中不生效
以上都是我的跟人觀點,如果有不對,或者有更好的方法,歡迎留言指正~~~(持續更新中)