最近中文字幕2019高清,亚洲人成高清在线播放,男生淦哭男生图片动漫有字,国产亚洲精品九九久在线观看,无码av专区丝袜专区

搜狗陌陌采集 —— python爬蟲(chóng)系列一

優(yōu)采云 發(fā)布時(shí)間: 2020-07-24 08:00

  前言:一覺(jué)醒來(lái),發(fā)現原有的搜狗陌陌爬蟲(chóng)失效了,網(wǎng)上查找一翻發(fā)覺(jué)10月29日搜狗陌陌改版了,無(wú)法通過(guò)搜索公眾號名子獲取對應文章了,不過(guò)通過(guò)搜索主題獲取對應文章還是可以的,問(wèn)題不大,開(kāi)搞!

  目的:獲取搜狗陌陌中搜索主題返回的文章。

  涉及反爬機制:cookie設置,js加密。

  完整代碼已上傳本人github,僅供參考。如果對您有幫助,勞煩看客大人給個(gè)星星!

  進(jìn)入題外話(huà)。

  打開(kāi)搜狗陌陌,在搜索框輸入“咸蛋超人”,這里搜索下來(lái)的就是有關(guān)“咸蛋超人”主題的各個(gè)公眾號的文章列表:

  

  按照正常的采集流程,此時(shí)按F12打開(kāi)瀏覽器的開(kāi)發(fā)者工具,利用選擇工具點(diǎn)擊列表中文章標題,查看源碼中列表中文章url的所在位置,再用xpath獲取文章url的值,也就是這個(gè)href的值,為防止混亂,我們稱(chēng)之為“列表頁(yè)面的文章url”。

  

  可以見(jiàn)到“列表頁(yè)面的文章url”需要拼接,一般這些情況須要在瀏覽器中正常訪(fǎng)問(wèn)一下這篇文章,對比觀(guān)察跳轉后的url(我們稱(chēng)之為“真實(shí)的文章url”),再缺頭補頭缺腿補腿即可。下面是兩個(gè)url的對比:

  列表頁(yè)面的文章url:

/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNFzn4G2S0Yt3MduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKn*敏*感*詞*csuPIjLhLEK3tbGSa3_pkMzadQg75Zhmxb9YI0psZvVepKtN4hpzQgtGa2iOlKKLwV_oxooGE6sxg1qinKxTb5VwJUcLBM1RgkzAPRtmyIGw2VAg..&type=2&query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&k=92&h=z

真實(shí)的文章url:

https://mp.weixin.qq.com/s?src=11&timestamp=1573092595&ver=1959&signature=FjD709D-0vHSyVgQyXCS-TUAcnT0M9Gx6JljQEb6O55zpuyyDaTHqgkRCxNDtt5ZDifDRUUBOemzxcz71FMOmO88m6RWfR0r4fFBe0VefAsjFu0pl-M0frYOnXPF5JD8&new=1

  這里很明顯兩個(gè)url的路徑不一致,應該是中間經(jīng)過(guò)了一些調轉,python的requests庫是帶手動(dòng)調轉功能,我們先把域名補上試一下訪(fǎng)問(wèn)

  

  明顯這兒做了反爬限制,那么這兒開(kāi)始,我們就須要抓包剖析了。這里用到的工具是Firefox瀏覽器的開(kāi)發(fā)者工具。抓包觀(guān)察的是從搜索結果頁(yè)面列表文章點(diǎn)擊跳轉到文章頁(yè)面的過(guò)程,這里點(diǎn)擊文章超鏈接會(huì )在新窗口打開(kāi),我們只須要在網(wǎng)頁(yè)源碼中把對應a標簽的target屬性改為空搜狗微信文章采集,就可以在一個(gè)窗口中觀(guān)察整個(gè)流程的數據包了。

  

  抓包剖析:

  

  

  通過(guò)抓包我們可以找到搜索結果頁(yè)面跳轉到文章頁(yè)面的過(guò)程,這里觀(guān)察發(fā)覺(jué),“列表頁(yè)面的文章url”返回的結果中就包含了“真實(shí)的文章url”的信息,這意味著(zhù)我們只須要正確訪(fǎng)問(wèn)到“列表頁(yè)面的文章url”,根據返回的數據能夠拼接出“真實(shí)的文章url”并訪(fǎng)問(wèn)了,這樣我們就實(shí)現從“列表頁(yè)面的文章url”到“真實(shí)的文章url”的跳轉了!

  此時(shí)我們的目標就從獲取“真實(shí)的文章url”轉變到正確的訪(fǎng)問(wèn)“列表頁(yè)面的文章url”了,繼續剖析抓包數據中的“列表頁(yè)面的文章url”信息:

  抓包數據:

  url:https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNEnNekGBXt9LMduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKn*敏*感*詞*csuPIjLhLEK3tbGaBLLLEV3E0vo604DcwbvX2VNudQZNnBemevd34BJP94ZL5zUiA49LgzIjRlpGxccVxTTaLhHZKstaeqw41upSVAe0f8bRARvQ..&type=2&query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&k=60&h=U

  method:GET

  請求參數:{"url":"dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNEnNekGBXt9LMduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKn*敏*感*詞*csuPIjLhLEK3tbGaBLLLEV3E0vo604DcwbvX2VNudQZNnBemevd34BJP94ZL5zUiA49LgzIjRlpGxccVxTTaLhHZKstaeqw41upSVAe0f8bRARvQ..","type":"2","query":"咸蛋超人","k":"60","h":"U"}

  headers

    Host: weixin.sogou.com

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    Accept-Encoding: gzip, deflate, br

    Connection: keep-alive

    Referer: https://weixin.sogou.com/weixin?type=2&query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&ie=utf8&s_from=input&_sug_=n&_sug_type_=1&w=01015002&oq=&ri=1&sourceid=sugg&sut=750912&sst0=1573092594229&lkt=0%2C0%2C0&p=40040108

    Cookie: 見(jiàn)下

  Cookie:{"ABTEST":"4|1573094886|v1","IPLOC":"CN4401","JSESSIONID":"aaa3VBk4eXnIf8d4bdx4w","SNUID":"57A28ED20A0F9FB2BBE3E0180AF00D25","SUID":"5EAB87DB2613910A000000005DC385E6","SUV":"00F221C2DB87AB5E5DC385E7BC43F633"}

  這里的重點(diǎn)有三個(gè):

  請求參數:對比我們獲取的“列表頁(yè)面的文章url”分析可以發(fā)覺(jué),這里多了兩個(gè)參數“k”、“h”,這是須要我們設法獲取的。headers:經(jīng)過(guò)測試該網(wǎng)站對User-Agent敏感,一次訪(fǎng)問(wèn)前后User-Agent須要一致。Cookie:Cookie中參數須要獲取能夠正確訪(fǎng)問(wèn)該url。這些參數分別是:ABTEST、IPLOC、JSESSIONID、SNUID、SUID、SUV。

  3.1:獲取參數“k”、“h”

  按照經(jīng)驗,從一個(gè)url轉變成另一個(gè)url有兩種情況:跳轉和javascript字符串處理。經(jīng)過(guò)多次抓包剖析發(fā)覺(jué),搜索結果頁(yè)面點(diǎn)擊文章超鏈接到我們現今的目標url并沒(méi)有存在跳轉情況,抓包數據中的“列表頁(yè)面的文章url”和我們獲取的“列表頁(yè)面的文章url”可以判斷為同一個(gè)url,所以推測為javascript字符串處理。經(jīng)過(guò)一番搜救,發(fā)現搜索結果頁(yè)面的源碼中有一段十分可疑的代碼:

  <script>

(function(){$("a").on("mousedown click contextmenu",function(){var b=Math.floor(100*Math.random())+1,a=this.href.indexOf("url="),c=this.href.indexOf("&amp;k=");-1!==a&amp;&amp;-1===c&amp;&amp;(a=this.href.substr(a+4+parseInt("21")+b,1),this.href+="&amp;k="+b+"&amp;h="+a)})})();

</script>

  這其中最重要的代碼就是:this.href+="&amp;k="+b+"&amp;h="+a,這代碼就是在點(diǎn)擊風(fēng)波發(fā)生時(shí)給a標簽href屬性的內容添加"&amp;k="、"&amp;h=",正是用這段代碼對該url的參數進(jìn)行js加密和添加的。我們只須要把這段代碼用python實(shí)現就可以解決這個(gè)問(wèn)題了,下面是實(shí)現python實(shí)現代碼:

  def get_k_h(url): <br />  b = int(random.random() * 100) + 1

a = url.find("url=")

url = url + "&amp;k=" + str(b) + "&amp;h=" + url[a + 4 + 21 + b: a + 4 + 21 + b + 1]<br />  reuturn url

  3.2:獲取Cookie的參數

  觀(guān)察抓包數據可以發(fā)覺(jué),當我們一開(kāi)始訪(fǎng)問(wèn)時(shí)并沒(méi)有帶任何cookie,但經(jīng)過(guò)一系列懇求,到我們的目標懇求時(shí)侯,瀏覽器早已通過(guò)上面懇求的返回數據包的Set-Cookie屬性把Cookie構造下來(lái)了,而我們要做的就是在Cookie構造從無(wú)到有這個(gè)過(guò)程中找到所有ResponseHeaders中帶SetCookie屬性的并且參數是我們須要的參數的懇求,并模擬訪(fǎng)問(wèn)一遍,就能得到所有參數并建立出我們須要的Cookie了。

  

  例如搜狗微信搜索插口的懇求的ResponseHeaders就有5個(gè)Set-Cookie數組,其中ABTEST、SNUID、IPLOC、SUID都是我們最終構造Cookie所需的參數(和最后的Cookie值對比可以發(fā)覺(jué),這里的SUID值還不是我們最終須要的,要在前面的數據包中繼續開(kāi)掘)。

  經(jīng)過(guò)剖析搜狗微信文章采集,經(jīng)過(guò)四個(gè)懇求獲取到的ResponseHeaders后我們能夠正確建立Cookie了:

  1. 得到ABTEST、SNUID、IPLOC、SUID:<br />  https://weixin.sogou.com/weixin?type=2&amp;query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&amp;ie=utf8&amp;s_from=input&amp;_sug_=n&amp;_sug_type_=1&amp;w=01015002&amp;oq=&amp;ri=1&amp;sourceid=sugg&amp;sut=750912&amp;sst0=1573092594229&amp;lkt=0%2C0%2C0&amp;p=40040108<br />2. 需要IPLOC、SNUID,得到SUID:<br />  https://www.sogou.com/sug/css/m3.min.v.7.css<br />3. 需要ABTEST、IPLOC、SNUID、SUID,得到JSESSIONID:<br />  https://weixin.sogou.com/websearch/wexinurlenc_sogou_profile.jsp<br />4. 需要IPLOC、SNUID、SUID,得到SUV<br />  https://pb.sogou.com/pv.gif<br />

  這四個(gè)懇求都能依照上面懇求獲取到的Cookie參數來(lái)構造自己須要的Cookie去正確訪(fǎng)問(wèn)。值得注意的是最后一個(gè)懇求,除了須要正確拼接Cookie外,還須要獲取正確的懇求參數能夠正常訪(fǎng)問(wèn):

  

  這種找參數的活可以借助瀏覽器的全局搜索功能,一番搜救后,就會(huì )發(fā)覺(jué)在搜索結果頁(yè)面的源代碼中早已返回了這兒所需的所有參數,用正則把那些參數解析下來(lái)即可:

  

  那么按照這種解析下來(lái)的參數和上面三個(gè)懇求得到的Cookie參數能夠正確訪(fǎng)問(wèn)第四個(gè)懇求并得到所需的所有Cookie參數啦!

  此時(shí),我們早已剖析出所有正確模擬懇求的流程了,梳理一下:

  獲取“k”、“h”參數,傳入搜索結果頁(yè)面得到的“列表頁(yè)面的文章ur”,調用get_k_h()即可。獲取所需Cookie參數,構造正確的Cookie,按照流程三給出的4個(gè)url,分別構造懇求獲取ResponseHeaders中的SetCookie即可。構造正確的懇求訪(fǎng)問(wèn)“列表頁(yè)面的文章url”。根據3中懇求返回的數據,拼接出“真實(shí)的文章url”,也就是流程二。請求“真實(shí)的文章url”,得到真正的文章頁(yè)面數據。

  至此,所有剖析結束,可以愉快的碼代碼啦!

  結語(yǔ):此次采集涉及到的反爬技術(shù)是Cookie構造和簡(jiǎn)答的js加密,難度不大,最重要的是耐心和悉心。此外提醒諸位看客大人遵守爬蟲(chóng)道德,不要對別人網(wǎng)站造成傷害,peace!

0 個(gè)評論

要回復文章請先登錄注冊


官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

最近中文字幕2019高清,亚洲人成高清在线播放,男生淦哭男生图片动漫有字,国产亚洲精品九九久在线观看,无码av专区丝袜专区