2017-04-17 50 views
0

我設置標題下面的方式Scrapy大寫請求頭

headers = { 
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
    'cache-control': 'no-cache', 
... 
} 

,並呼籲要求這樣的:

yield scrapy.Request(url='https:/myurl.com/', callback=self.parse, 
headers=headers, cookies=cookies, meta={'proxy': 'http://localhost:8888'}) 

這讓該scrapy大寫所有這些標題,它看起來像(我正在使用Charles代理進行調試):

Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Cache-Control: no-cache 

而這對我的情況並不正確。

如果我使用捲曲和設置頭小寫

accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
cache-control: no-cache 

一切就像一個魅力。

有什麼辦法可以禁用Scrapy中的這種大寫行爲? 感謝您的幫助!

+2

你確定是問題所在? HTTP標頭應該不區分大小寫。 – Chris

+0

你可以用'curl'和大寫的標題來檢查上面的問題,並檢查它是否給出相同的輸出。如果是這樣,你的問題不是你認爲的問題。 – holdenweb

+0

是的,我很確定。我想我想解析的網站正在處理它一些特殊的方式。 – kspi33

回答

1

這不能用Scrapy開箱即用。

原因:它是通過設計以不區分大小寫的方式管理標題(請參閱:https://github.com/scrapy/scrapy/blob/master/scrapy/http/headers.py)。猜猜他們這樣做是爲了避免重複標題的麻煩。

所以很可能你必須做一個fork和roll你自己的頭處理實現或者至少做一些猴子修補。

但我想知道這是否真的是你需要的。我知道有些網站確實要求使用標題指紋來檢測殭屍程序,但scrapy生成的大寫標題看起來比您想爲請求生成的所有小寫標題看起來要多得多。