1. 程式人生 > >爬取今日頭條街拍圖的一次教訓

爬取今日頭條街拍圖的一次教訓

本 來只要按照崔大大的步驟一步一步做下去,啥問題沒有。

但我看完他的操作之後,自己操作了一遍。在街拍_頭條搜尋這個頁面發起ajax請求並沒有遇到什麼問題,然後理所當然的訪問其中一個子頁面

什麼都沒有想,我就直接看了一下瀏覽器有沒有ajax請求,看了一下ajax(XHR)的內容發現裡面有圖片地址,就開始分析請求的引數,有三個引數是一直變化的as、cp、_signature。接著在眾多的js檔案中搜索_signature這個,看了一個JavaScript程式碼,發現自己根本看不懂,其中這個印象深刻 (0,h.default)(i + “”) 這是個什麼語法。。。

然後突然想了想,既然pc端的爬不了,能不能爬手機端的,就將谷歌瀏覽器改為手機訪問,看了一下ajax內容,再看了一下請求引數,重新整理了幾遍,發現只有第一個parent_rid是變化的,而且看這變化好像是隨機的,我就直接帶入一個值,用requests構造url,這又出現了一個問題。

請求引數有兩個sum:5,sum:15,code_id:14798012085000246,code_id:14798012085000246,這就不能直接構造字典了,因為字典的鍵不能重複。只能用urllib.parse來構建。urlencode和requests一樣,只能將字典改為字串列表,先將中文用urllib.parse.quote()變為url編碼,再自己加等號,用‘&’.join()拼接一下(感覺這個也可以手工加上去)。之後發起請求,url為https://m.toutiao.com/i6589113068687458830/,得到了json資料,然後用re提取圖片連結,把連結的圖片下下來。

當我以為差不多完成了的時候,去看了一下下載的圖片,這都是些什麼圖,我漂亮的小姐姐的高清大圖呢。於是回瀏覽器看了一下ajax請求的內容,對比一下瀏覽器,原來ajax載入的都是熱門推薦,並不是我要的內容。不在ajax裡,應該在原始碼裡吧 ,requests發起請求將原始碼儲存到本地,搜尋了一下圖片連結的關鍵幾個詞,沒有內容???這怎麼回事。難道是js動態渲染的。。

在論壇裡發個帖子,求助了一下,頓時無語,原來pc端子頁面的響應內容裡就已經包含了我要的內容,查看了一下電腦端的ajax,這居然也不是正文的內容。我繞了這麼一大圈,是在幹嘛。

哎,沒有經驗的小白真的難受。回頭看了看崔大大的程式碼,這。。。