起因是想爬五等分的花嫁的漫畫。這是其中的一個坑
先上代碼
data={ 'cid':567464, 'page':1, 'key':'', 'language':1, 'gtk':6, '_cid':567464, '_mid':34949, '_dt':'2019-05-03 13:03:08', '_sign':'e74c8c52618a64a454dd7f12aff3cc1c' }
def getFun(url,data): ret=requests.get(url,params=data) print(ret.url) return ret
有兩個坑。
一是使用get方法帶參數請求時,是params=參數字典,而不是data=。data=是post方法的參數。只怪我學藝不精,只能在坑里摸爬滾打了
二是對參數的編碼,對於上面的參數需要編碼的就是_dt,這個是時間的參數需要編碼,編碼的是空格和冒號。我之前在瀏覽器上看的url是編碼好的,我就預先編碼好數據放到data里了,然而並不需要這樣,只要把原始數據放進去,他就會自動編碼。放入預先自己編碼的數據反而會出錯。這里我還發現了一點,在url編碼時,有些編碼是把空格編碼為+,有些則是編碼為%20,這一點我還沒弄明白為什么。放入參數的數據是把空格編碼為+了,我所訪問的網址也正是需要這樣的編碼。
還有一點因為學藝不精而浪費大量時間。可以直接用ret.url來返回所請求的url,這樣就可以與瀏覽器直接訪問的結果對比。在找到這個函數之前一直是不停改參數看response來判斷是不是對,然而到最后還是沒改好,還是通過看這個ret.url才知道是編碼的問題。
我好菜。