關(guān)于Cookie的分析我在爬蟲筆記(六) - 關(guān)于 Cookie 的分析(Postman Request Selenium)中說明了,本次的目標(biāo)網(wǎng)站也是同一個(gè)
本文主要包含一個(gè)要點(diǎn)寂玲,在分析完請(qǐng)求后塔插,使用不同的方法構(gòu)造同一個(gè)HTTP請(qǐng)求,方法包括:
- Scrapy框架
- Request庫(kù)
- Chrome的Postman插件
Scrapy中一段讓我揪心的代碼
在分析前拓哟,我說一個(gè)自己遇到過的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請(qǐng)求
#!/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)
如果看完這兩段代碼你看懂了關(guān)鍵點(diǎn),本文最想突出的核心要點(diǎn)你也看懂了断序。
看不懂也不急流纹,先看下基礎(chǔ)分析
Scrapy框架中的Request請(qǐng)求分析
首先是Request對(duì)象中文文檔
class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])
參數(shù)要點(diǎn):
- url(必填):請(qǐng)求的URL,所說的目標(biāo)網(wǎng)站
- method='GET'
- headers
- body
- cookies
Scrapy特有:
- encoding='utf-8'
- priority=0
- dont_filter=False
- meta:
- callback:
- errback:
(占位---待繼續(xù)更新)
Request庫(kù)中的Request請(qǐng)求分析
requests庫(kù)中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)
(占位---待繼續(xù)更新)
Chrome的Postman插件中的Request請(qǐng)求分析
對(duì)于Postman的請(qǐng)求违诗,我這里分兩種Method分析(其他的爬蟲中很少用到)
- Get請(qǐng)求
- Post請(qǐng)求
首先是get請(qǐng)求
要點(diǎn):
- 請(qǐng)求的方法:Get
- 請(qǐng)求的URL
- 請(qǐng)求的Params參數(shù)
- 請(qǐng)求的Headers頭部
然后是Post請(qǐng)求
要點(diǎn):
- 請(qǐng)求的方法:Post
- 請(qǐng)求的URL
- 請(qǐng)求的Params參數(shù)
- 請(qǐng)求的Headers頭部
- Request Body(提供了4中編輯方式)
然而漱凝,在Post中的4種編輯方式分別為:
- form-data
- x-www-form-urlencoded
- raw
- binary
(占位---待繼續(xù)更新)
總結(jié):其實(shí)我想了很久,一直沒想明白诸迟,為什么同一個(gè)請(qǐng)求放Request庫(kù)中成功了茸炒,而在scrapy中失敗了阵苇,對(duì)于這個(gè)問題壁公,其實(shí)就是不是很難,就是越簡(jiǎn)單越害人绅项。Request庫(kù)的請(qǐng)求的Cookies是可以放到headers中可以辨別的润努,而Scrapy的Cookies有一個(gè)獨(dú)立的cookies參數(shù)來處理Cookie,放在headers中不生效
以上都是我的跟人觀點(diǎn)示括,如果有不對(duì)铺浇,或者有更好的方法,歡迎留言指正~~~(持續(xù)更新中)