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

cookie

cookie

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

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 608 次瀏覽 ? 2020-07-24 08:00 ? 來(lái)自相關(guān)話(huà)題

  前言:一覺(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_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGSa3_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% ... h%3DU
  method:GET
  請求參數:{"url":"dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNEnNekGBXt9LMduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGaBLLLEV3E0vo604DcwbvX2VNudQZNnBemevd34BJP94ZL5zUiA49LgzIjRlpGxccVxTTaLhHZKstaeqw41upSVAe0f8bRARvQ..","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/weixi ... 40108
    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/weixi ... %3Bbr />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/webse ... %3Bbr />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! 查看全部
  前言:一覺(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_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGSa3_pkMzadQg75Zhmxb9YI0psZvVepKtN4hpzQgtGa2iOlKKLwV_oxooGE6sxg1qinKxTb5VwJUcLBM1RgkzAPRtmyIGw2VAg..&amp;type=2&amp;query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&amp;k=92&amp;h=z
真實(shí)的文章url:
https://mp.weixin.qq.com/s?src=11&amp;timestamp=1573092595&amp;ver=1959&amp;signature=FjD709D-0vHSyVgQyXCS-TUAcnT0M9Gx6JljQEb6O55zpuyyDaTHqgkRCxNDtt5ZDifDRUUBOemzxcz71FMOmO88m6RWfR0r4fFBe0VefAsjFu0pl-M0frYOnXPF5JD8&amp;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”信息:
  抓包數據:
  urlhttps://weixin.sogou.com/link% ... h%3DU
  method:GET
  請求參數:{"url":"dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNEnNekGBXt9LMduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGaBLLLEV3E0vo604DcwbvX2VNudQZNnBemevd34BJP94ZL5zUiA49LgzIjRlpGxccVxTTaLhHZKstaeqw41upSVAe0f8bRARvQ..","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/weixi ... 40108
    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/weixi ... %3Bbr />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/webse ... %3Bbr />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!

Python爬蟲(chóng)借助cookie實(shí)現模擬登錄實(shí)例解讀

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 439 次瀏覽 ? 2020-07-05 08:00 ? 來(lái)自相關(guān)話(huà)題

  Cookie,指個(gè)別網(wǎng)站為了分辨用戶(hù)身分、進(jìn)行session跟蹤而存儲在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
  舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
  我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
  cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
  這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
  
  之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
  下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
  它們的關(guān)系:CookieJar —-派生—-&gt;FileCookieJar —-派生—–&gt;MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
  1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
  結果:
  
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
  這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
  2、將cookie保存到文件
  上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
  將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:
  
  CookieJar是沒(méi)有保存save屬性的~
  save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:
  
  這樣我們就成功保存了我們想要的cookie
  3、從文件中獲取cookie并訪(fǎng)問(wèn) 查看全部

  Cookie,指個(gè)別網(wǎng)站為了分辨用戶(hù)身分、進(jìn)行session跟蹤而存儲在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
  舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
  我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
  cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
  這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
  
  之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
  下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
  它們的關(guān)系:CookieJar —-派生—-&gt;FileCookieJar —-派生—–&gt;MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
  1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com";) #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
  結果:
  
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
  這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
  2、將cookie保存到文件
  上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com";) #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
  將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:
  
  CookieJar是沒(méi)有保存save屬性的~
  save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:
  
  這樣我們就成功保存了我們想要的cookie
  3、從文件中獲取cookie并訪(fǎng)問(wèn)

Python借助requests進(jìn)行模擬登陸

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 648 次瀏覽 ? 2020-06-25 08:00 ? 來(lái)自相關(guān)話(huà)題

  
  Python3 模擬登陸并爬取表格數據!
  本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
  使用python模擬登陸
  使用python模擬登陸Windows + Linux 均成功
  Python模擬一個(gè)用戶(hù)登入系統
  題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...
  
  使用python模擬瀏覽器實(shí)現登錄
  讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
  Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
  前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
  Python模擬百度登陸
  注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
  任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
  知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
  python實(shí)現模擬登陸
  本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...
  
  請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
  比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
  requests 實(shí)現模擬登陸,獲取cookie
  有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
  Python模擬登錄
  最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
  Python模擬登陸的幾種方式
  目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
  用Python模擬登陸中學(xué)教務(wù)系統搶課
  -- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
  Python爬蟲(chóng)之模擬登陸總結
  備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
  python模擬瀏覽器登陸
  轉自:
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
  Visual C++技術(shù)內幕(第四版).part4.rar下載
  一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
  sap施行顧問(wèn)寶典2下載
  sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
  Xilinx_ise使用教程(配合Modelsim使用)下載
  這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
  相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
  我們是太有底線(xiàn)的 查看全部
  
  Python3 模擬登陸并爬取表格數據!
  本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
  使用python模擬登陸
  使用python模擬登陸Windows + Linux 均成功
  Python模擬一個(gè)用戶(hù)登入系統
  題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...
  
  使用python模擬瀏覽器實(shí)現登錄
  讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
  Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
  前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
  Python模擬百度登陸
  注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
  任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
  知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
  python實(shí)現模擬登陸
  本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...
  
  請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
  比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
  requests 實(shí)現模擬登陸,獲取cookie
  有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
  Python模擬登錄
  最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
  Python模擬登陸的幾種方式
  目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
  用Python模擬登陸中學(xué)教務(wù)系統搶課
  -- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
  Python爬蟲(chóng)之模擬登陸總結
  備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
  python模擬瀏覽器登陸
  轉自:
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
  Visual C++技術(shù)內幕(第四版).part4.rar下載
  一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
  sap施行顧問(wèn)寶典2下載
  sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
  Xilinx_ise使用教程(配合Modelsim使用)下載
  這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
  相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
  我們是太有底線(xiàn)的

【php爬蟲(chóng)】百萬(wàn)級別知乎用戶(hù)數據爬取與剖析

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 286 次瀏覽 ? 2020-06-14 08:03 ? 來(lái)自相關(guān)話(huà)題

  代碼托管地址:
  文/Hector
  這次抓取了110萬(wàn)的用戶(hù)數據php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,數據剖析結果如下:
  開(kāi)發(fā)前的打算
  安裝linux系統(Ubuntu14.04),在VMWare虛擬機下安裝一個(gè)Ubuntu;
  安裝PHP5.6或以上版本;
  安裝curl、pcntl擴充。
  使用PHP的curl擴充抓取頁(yè)面數據
  PHP的curl擴充是PHP支持的容許你與各類(lèi)服務(wù)器使用各類(lèi)類(lèi)型的合同進(jìn)行聯(lián)接和通訊的庫。
  本程序是抓取知乎的用戶(hù)數據,要能訪(fǎng)問(wèn)用戶(hù)個(gè)人頁(yè)面,需要用戶(hù)登陸后的能夠訪(fǎng)問(wèn)。當我們在瀏覽器的頁(yè)面中點(diǎn)擊一個(gè)用戶(hù)頭像鏈接步入用戶(hù)個(gè)人中心頁(yè)面的時(shí)侯,之所以還能看見(jiàn)用戶(hù)的信息,是因為在點(diǎn)擊鏈接的時(shí)侯,瀏覽器幫你將本地的cookie帶上一同遞交到新的頁(yè)面,所以你才能步入到用戶(hù)的個(gè)人中心頁(yè)面。因此實(shí)現訪(fǎng)問(wèn)個(gè)人頁(yè)面之前須要先獲得用戶(hù)的cookie信息,然后在每次curl懇求的時(shí)侯帶上cookie信息。在獲取cookie信息方面,我是用了自己的cookie,在頁(yè)面中可以看見(jiàn)自己的cookie信息:
  一個(gè)個(gè)地復制,以"__utma=?;__utmb=?;"這樣的方式組成一個(gè)cookie字符串。接下來(lái)就可以使用該cookie字符串來(lái)發(fā)送懇求。
  初始的示例:
   $url = ''; <br /> //此處mora-hu代表用戶(hù)ID
$ch = curl_init($url); <br /> //初始化會(huì )話(huà)
curl_setopt($ch, CURLOPT_HEADER, 0); <br /> curl_setopt($ch, CURLOPT_COOKIE, $this-&gt;config_arr['user_cookie']); <br /> //設置請求COOKIE
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); <br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); <br /> //將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); <br /> $result = curl_exec($ch); <br /> return $result; //抓取的結果
  運行里面的代碼可以獲得mora-hu用戶(hù)的個(gè)人中心頁(yè)面。利用該結果再使用正則表達式對頁(yè)面進(jìn)行處理,就能獲取到姓名,性別等所須要抓取的信息。
  圖片防盜鏈
  在對返回結果進(jìn)行正則處理后輸出個(gè)人信息的時(shí)侯,發(fā)現在頁(yè)面中輸出用戶(hù)頭像時(shí)難以打開(kāi)。經(jīng)過(guò)查閱資料獲知,是因為知乎對圖片做了防盜鏈處理。解決方案就是懇求圖片的時(shí)侯在懇求頭里偽造一個(gè)referer。
  在使用正則表達式獲取到圖片的鏈接以后,再發(fā)一次懇求,這時(shí)候帶上圖片懇求的來(lái)源,說(shuō)明該懇求來(lái)自知乎網(wǎng)站的轉發(fā)。具體事例如下:
  function getImg($url, $u_id){ <br /> if (file_exists('./images/' . $u_id . ".jpg")) <br /> { <br /> return "images/$u_id" . '.jpg'; } if (empty($url)) <br /> { <br /> return ''; <br /> }<br /> $context_options = array( <br /> 'http' =&gt;
array(<br /> 'header' =&gt; "Referer:"//帶上referer參數
  )<br />  );<br /> $context = stream_context_create($context_options);<br /> $img = file_get_contents('http:' . $url, FALSE, $context);<br /> file_put_contents('./images/' . $u_id . ".jpg", $img);<br /> return "images/$u_id" . '.jpg';}
  爬取更多用戶(hù)
  抓取了自己的個(gè)人信息后,就須要再訪(fǎng)問(wèn)用戶(hù)的關(guān)注者和關(guān)注了的用戶(hù)列表獲取更多的用戶(hù)信息。然后一層一層地訪(fǎng)問(wèn)??梢砸?jiàn)到,在個(gè)人中心頁(yè)面里,有兩個(gè)鏈接如下:
  這里有兩個(gè)鏈接,一個(gè)是關(guān)注了,另一個(gè)是關(guān)注者,以“關(guān)注了”的鏈接為例。用正則匹配去匹配到相應的鏈接,得到url以后用curl帶上cookie再發(fā)一次懇求。抓取到用戶(hù)關(guān)注了的用于列表頁(yè)以后,可以得到下邊的頁(yè)面:
  分析頁(yè)面的html結構php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,因為只要得到用戶(hù)的信息,所以只須要框住的這一塊的div內容,用戶(hù)名都在這上面??梢钥匆?jiàn),用戶(hù)關(guān)注了的頁(yè)面的url是:
  不同的用戶(hù)的這個(gè)url幾乎是一樣的,不同的地方就在于用戶(hù)名哪里。用正則匹配領(lǐng)到用戶(hù)名列表,一個(gè)一個(gè)地拼url,然后再挨個(gè)發(fā)懇求(當然,一個(gè)一個(gè)是比較慢的,下面有解決方案,這個(gè)稍后會(huì )說(shuō)到)。進(jìn)入到新用戶(hù)的頁(yè)面然后,再重復前面的步驟,就這樣不斷循環(huán),直到達到你所要的數據量。 查看全部

  代碼托管地址:
  文/Hector
  這次抓取了110萬(wàn)的用戶(hù)數據php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,數據剖析結果如下:
  開(kāi)發(fā)前的打算
  安裝linux系統(Ubuntu14.04),在VMWare虛擬機下安裝一個(gè)Ubuntu;
  安裝PHP5.6或以上版本;
  安裝curl、pcntl擴充。
  使用PHP的curl擴充抓取頁(yè)面數據
  PHP的curl擴充是PHP支持的容許你與各類(lèi)服務(wù)器使用各類(lèi)類(lèi)型的合同進(jìn)行聯(lián)接和通訊的庫。
  本程序是抓取知乎的用戶(hù)數據,要能訪(fǎng)問(wèn)用戶(hù)個(gè)人頁(yè)面,需要用戶(hù)登陸后的能夠訪(fǎng)問(wèn)。當我們在瀏覽器的頁(yè)面中點(diǎn)擊一個(gè)用戶(hù)頭像鏈接步入用戶(hù)個(gè)人中心頁(yè)面的時(shí)侯,之所以還能看見(jiàn)用戶(hù)的信息,是因為在點(diǎn)擊鏈接的時(shí)侯,瀏覽器幫你將本地的cookie帶上一同遞交到新的頁(yè)面,所以你才能步入到用戶(hù)的個(gè)人中心頁(yè)面。因此實(shí)現訪(fǎng)問(wèn)個(gè)人頁(yè)面之前須要先獲得用戶(hù)的cookie信息,然后在每次curl懇求的時(shí)侯帶上cookie信息。在獲取cookie信息方面,我是用了自己的cookie,在頁(yè)面中可以看見(jiàn)自己的cookie信息:
  一個(gè)個(gè)地復制,以"__utma=?;__utmb=?;"這樣的方式組成一個(gè)cookie字符串。接下來(lái)就可以使用該cookie字符串來(lái)發(fā)送懇求。
  初始的示例:
   $url = ''; <br /> //此處mora-hu代表用戶(hù)ID
$ch = curl_init($url); <br /> //初始化會(huì )話(huà)
curl_setopt($ch, CURLOPT_HEADER, 0); <br /> curl_setopt($ch, CURLOPT_COOKIE, $this-&gt;config_arr['user_cookie']); <br /> //設置請求COOKIE
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); <br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); <br /> //將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); <br /> $result = curl_exec($ch); <br /> return $result; //抓取的結果
  運行里面的代碼可以獲得mora-hu用戶(hù)的個(gè)人中心頁(yè)面。利用該結果再使用正則表達式對頁(yè)面進(jìn)行處理,就能獲取到姓名,性別等所須要抓取的信息。
  圖片防盜鏈
  在對返回結果進(jìn)行正則處理后輸出個(gè)人信息的時(shí)侯,發(fā)現在頁(yè)面中輸出用戶(hù)頭像時(shí)難以打開(kāi)。經(jīng)過(guò)查閱資料獲知,是因為知乎對圖片做了防盜鏈處理。解決方案就是懇求圖片的時(shí)侯在懇求頭里偽造一個(gè)referer。
  在使用正則表達式獲取到圖片的鏈接以后,再發(fā)一次懇求,這時(shí)候帶上圖片懇求的來(lái)源,說(shuō)明該懇求來(lái)自知乎網(wǎng)站的轉發(fā)。具體事例如下:
  function getImg($url, $u_id){ <br /> if (file_exists('./images/' . $u_id . ".jpg")) <br /> { <br /> return "images/$u_id" . '.jpg'; } if (empty($url)) <br /> { <br /> return ''; <br /> }<br /> $context_options = array( <br /> 'http' =&gt;
array(<br /> 'header' =&gt; "Referer:"//帶上referer參數
  )<br />  );<br /> $context = stream_context_create($context_options);<br /> $img = file_get_contents('http:' . $url, FALSE, $context);<br /> file_put_contents('./images/' . $u_id . ".jpg", $img);<br /> return "images/$u_id" . '.jpg';}
  爬取更多用戶(hù)
  抓取了自己的個(gè)人信息后,就須要再訪(fǎng)問(wèn)用戶(hù)的關(guān)注者和關(guān)注了的用戶(hù)列表獲取更多的用戶(hù)信息。然后一層一層地訪(fǎng)問(wèn)??梢砸?jiàn)到,在個(gè)人中心頁(yè)面里,有兩個(gè)鏈接如下:
  這里有兩個(gè)鏈接,一個(gè)是關(guān)注了,另一個(gè)是關(guān)注者,以“關(guān)注了”的鏈接為例。用正則匹配去匹配到相應的鏈接,得到url以后用curl帶上cookie再發(fā)一次懇求。抓取到用戶(hù)關(guān)注了的用于列表頁(yè)以后,可以得到下邊的頁(yè)面:
  分析頁(yè)面的html結構php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,因為只要得到用戶(hù)的信息,所以只須要框住的這一塊的div內容,用戶(hù)名都在這上面??梢钥匆?jiàn),用戶(hù)關(guān)注了的頁(yè)面的url是:
  不同的用戶(hù)的這個(gè)url幾乎是一樣的,不同的地方就在于用戶(hù)名哪里。用正則匹配領(lǐng)到用戶(hù)名列表,一個(gè)一個(gè)地拼url,然后再挨個(gè)發(fā)懇求(當然,一個(gè)一個(gè)是比較慢的,下面有解決方案,這個(gè)稍后會(huì )說(shuō)到)。進(jìn)入到新用戶(hù)的頁(yè)面然后,再重復前面的步驟,就這樣不斷循環(huán),直到達到你所要的數據量。

老司機帶你學(xué)爬蟲(chóng)——Python爬蟲(chóng)技術(shù)分享

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 303 次瀏覽 ? 2020-05-06 08:01 ? 來(lái)自相關(guān)話(huà)題

  什么是“爬蟲(chóng)”?
  簡(jiǎn)單來(lái)說(shuō),寫(xiě)一個(gè)從web上獲取須要數據并按規定格式儲存的程序就叫爬蟲(chóng);
  爬蟲(chóng)理論上步驟很簡(jiǎn)單,第一步獲取html源碼,第二步剖析html并領(lǐng)到數據。但實(shí)際操作,老麻煩了~
  用Python寫(xiě)“爬蟲(chóng)”有什么便捷的庫
  常用網(wǎng)路懇求庫:requests、urllib、urllib2、
  urllib和urllib2是Python自帶模塊,requests是第三方庫
  常用解析庫和爬蟲(chóng)框架:BeautifulSoup、lxml、HTMLParser、selenium、Scrapy
  HTMLParser是Python自帶模塊;
  BeautifulSoup可以將html解析成Python句型對象,直接操作對象會(huì )十分便捷;
  lxml可以解析xml和html標簽語(yǔ)言,優(yōu)點(diǎn)是速度快;
  selenium調用瀏覽器的driver,通過(guò)這個(gè)庫你可以直接調用瀏覽器完成個(gè)別操作,比如輸入驗證碼;
  Scrapy太強悍且有名的爬蟲(chóng)框架,可以輕松滿(mǎn)足簡(jiǎn)單網(wǎng)站的爬??;這個(gè)python學(xué)習(q-u-n):二二七,四三五,四五零 期待你們一起交流討論,講實(shí)話(huà)還是一個(gè)特別適宜學(xué)習的地方的。軟件各類(lèi)入門(mén)資料
  “爬蟲(chóng)”需要把握什么知識
  1)超文本傳輸協(xié)議HTTP:HTTP合同定義了瀏覽器如何向萬(wàn)維網(wǎng)服務(wù)器懇求萬(wàn)維網(wǎng)文檔,以及服務(wù)器如何把文檔傳送給瀏覽器。常用的HTTP方式有GET、POST、PUT、DELETE。
  【插曲:某站長(cháng)做了一個(gè)網(wǎng)站,奇葩的他把刪掉的操作綁定在GET懇求上。百度或則微軟爬蟲(chóng)爬取網(wǎng)站鏈接,都是用的GET懇求,而且通常用瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè)都是GET懇求。在微軟爬蟲(chóng)爬取他網(wǎng)站的信息時(shí),該網(wǎng)站自動(dòng)刪掉了數據庫的全部數據】
  2)統一資源定位符URL: URL是拿來(lái)表示從因特網(wǎng)上得到的資源位置和訪(fǎng)問(wèn)那些資源的方式。URL給資源的位置提供一種具象的辨識方式,并用這些方式給資源定位。只要才能對資源定位,系統就可以對資源進(jìn)行各類(lèi)操作,如存取、更新、替換和查找其屬性。URL相當于一個(gè)文件名在網(wǎng)路范圍的擴充。
  3)超文本標記語(yǔ)言HTTP:HTML指的是超文本標記語(yǔ)言,是使用標記標簽來(lái)描述網(wǎng)頁(yè)的。HTML文檔包含HTML標簽和純文本,也稱(chēng)為網(wǎng)頁(yè)。Web 瀏覽器的作用是讀取 HTML 文檔,并以網(wǎng)頁(yè)的方式顯示出它們。瀏覽器不會(huì )顯示 HTML 標簽,而是使用標簽來(lái)解釋頁(yè)面的內容。簡(jiǎn)而言之就是你要懂點(diǎn)后端語(yǔ)言,這樣描述更直觀(guān)貼切。
  4)瀏覽器調試功能:學(xué)爬蟲(chóng)就是抓包,對懇求和響應進(jìn)行剖析,用代碼來(lái)模擬
  進(jìn)階爬蟲(chóng)
  熟練了基本爬蟲(chóng)以后,你會(huì )想著(zhù)獲取更多的數據,抓取更難的網(wǎng)站,然后你才會(huì )發(fā)覺(jué)獲取數據并不簡(jiǎn)單,而且現今反爬機制也十分的多。
  a.爬取知乎、簡(jiǎn)書(shū),需要登入并將上次的懇求時(shí)將sessions帶上,保持登入姿態(tài);
  b.爬取亞馬遜、京東、天貓等商品信息,由于信息量大、反爬機制建立,需要分布式【這里就難了】爬取,以及不斷切換USER_AGENT和代理IP;
  c.滑動(dòng)或下拉加載和同一url加載不同數據時(shí),涉及ajax的異步加載。這里可以有簡(jiǎn)單的返回html代碼、或者json數據,也可能有更變態(tài)的返回js代碼之后用瀏覽器執行,邏輯上很簡(jiǎn)單、但是寫(xiě)代碼那叫一個(gè)苦哇;
  d.還有點(diǎn)是須要面對的,驗證碼識別。這個(gè)有專(zhuān)門(mén)解析驗證碼的平臺.....不屬于爬蟲(chóng)范疇了,自己處理須要更多的數據剖析知識。
  e.數據存儲,關(guān)系數據庫和非關(guān)系數據庫的選擇和使用,設計防冗余數據庫表格,去重。大量數據儲存數據庫,會(huì )顯得太難受,
  f.編碼解碼問(wèn)題,數據的儲存涉及一個(gè)格式的問(wèn)題,python2或則3也就會(huì )涉及編碼問(wèn)題。另外網(wǎng)頁(yè)結構的不規范性,編碼格式的不同很容易觸發(fā)編碼異常問(wèn)題。下圖一個(gè)簡(jiǎn)單的轉碼規則
  
  一些常見(jiàn)的限制形式
  a.Basic Auth:一般會(huì )有用戶(hù)授權的限制,會(huì )在headers的Autheration數組里要求加入;
  b.Referer:通常是在訪(fǎng)問(wèn)鏈接時(shí),必須要帶上Referer數組,服務(wù)器會(huì )進(jìn)行驗證,例如抓取易迅的評論;
  c.User-Agent:會(huì )要求真是的設備,如果不加會(huì )用編程語(yǔ)言包里自有User-Agent,可以被辨認下來(lái);
  d.Cookie:一般在用戶(hù)登入或則個(gè)別操作后,服務(wù)端會(huì )在返回包中包含Cookie信息要求瀏覽器設置Cookie,沒(méi)有Cookie會(huì )很容易被辨認下來(lái)是偽造懇求;也有本地通過(guò)JS,根據服務(wù)端返回的某個(gè)信息進(jìn)行處理生成的加密信息,設置在Cookie上面;
  e.Gzip:請求headers上面帶了gzip,返回有時(shí)候會(huì )是gzip壓縮,需要解壓;
  f.JavaScript加密操作:一般都是在懇求的數據包內容上面會(huì )包含一些被javascript進(jìn)行加密限制的信息,例如新浪微博會(huì )進(jìn)行SHA1和RSA加密,之前是兩次SHA1加密,然后發(fā)送的密碼和用戶(hù)名就會(huì )被加密;
  g.網(wǎng)站自定義其他數組:因為http的headers可以自定義地段,所以第三方可能會(huì )加入了一些自定義的數組名稱(chēng)或則數組值,這也是須要注意的。
  真實(shí)的懇求過(guò)程中爬蟲(chóng)技術(shù),其實(shí)不止里面某一種限制,可能是幾種限制組合在一次,比如假如是類(lèi)似RSA加密的話(huà),可能先懇求服務(wù)器得到Cookie,然后再帶著(zhù)Cookie去懇求服務(wù)器領(lǐng)到私鑰,然后再用js進(jìn)行加密,再發(fā)送數據到服務(wù)器。所以弄清楚這其中的原理爬蟲(chóng)技術(shù),并且耐心剖析很重要。
  總結
  爬蟲(chóng)入門(mén)不難,但是須要知識面更廣和更多的耐心 查看全部

  什么是“爬蟲(chóng)”?
  簡(jiǎn)單來(lái)說(shuō),寫(xiě)一個(gè)從web上獲取須要數據并按規定格式儲存的程序就叫爬蟲(chóng);
  爬蟲(chóng)理論上步驟很簡(jiǎn)單,第一步獲取html源碼,第二步剖析html并領(lǐng)到數據。但實(shí)際操作,老麻煩了~
  用Python寫(xiě)“爬蟲(chóng)”有什么便捷的庫
  常用網(wǎng)路懇求庫:requests、urllib、urllib2、
  urllib和urllib2是Python自帶模塊,requests是第三方庫
  常用解析庫和爬蟲(chóng)框架:BeautifulSoup、lxml、HTMLParser、selenium、Scrapy
  HTMLParser是Python自帶模塊;
  BeautifulSoup可以將html解析成Python句型對象,直接操作對象會(huì )十分便捷;
  lxml可以解析xml和html標簽語(yǔ)言,優(yōu)點(diǎn)是速度快;
  selenium調用瀏覽器的driver,通過(guò)這個(gè)庫你可以直接調用瀏覽器完成個(gè)別操作,比如輸入驗證碼;
  Scrapy太強悍且有名的爬蟲(chóng)框架,可以輕松滿(mǎn)足簡(jiǎn)單網(wǎng)站的爬??;這個(gè)python學(xué)習(q-u-n):二二七,四三五,四五零 期待你們一起交流討論,講實(shí)話(huà)還是一個(gè)特別適宜學(xué)習的地方的。軟件各類(lèi)入門(mén)資料
  “爬蟲(chóng)”需要把握什么知識
  1)超文本傳輸協(xié)議HTTP:HTTP合同定義了瀏覽器如何向萬(wàn)維網(wǎng)服務(wù)器懇求萬(wàn)維網(wǎng)文檔,以及服務(wù)器如何把文檔傳送給瀏覽器。常用的HTTP方式有GET、POST、PUT、DELETE。
  【插曲:某站長(cháng)做了一個(gè)網(wǎng)站,奇葩的他把刪掉的操作綁定在GET懇求上。百度或則微軟爬蟲(chóng)爬取網(wǎng)站鏈接,都是用的GET懇求,而且通常用瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè)都是GET懇求。在微軟爬蟲(chóng)爬取他網(wǎng)站的信息時(shí),該網(wǎng)站自動(dòng)刪掉了數據庫的全部數據】
  2)統一資源定位符URL: URL是拿來(lái)表示從因特網(wǎng)上得到的資源位置和訪(fǎng)問(wèn)那些資源的方式。URL給資源的位置提供一種具象的辨識方式,并用這些方式給資源定位。只要才能對資源定位,系統就可以對資源進(jìn)行各類(lèi)操作,如存取、更新、替換和查找其屬性。URL相當于一個(gè)文件名在網(wǎng)路范圍的擴充。
  3)超文本標記語(yǔ)言HTTP:HTML指的是超文本標記語(yǔ)言,是使用標記標簽來(lái)描述網(wǎng)頁(yè)的。HTML文檔包含HTML標簽和純文本,也稱(chēng)為網(wǎng)頁(yè)。Web 瀏覽器的作用是讀取 HTML 文檔,并以網(wǎng)頁(yè)的方式顯示出它們。瀏覽器不會(huì )顯示 HTML 標簽,而是使用標簽來(lái)解釋頁(yè)面的內容。簡(jiǎn)而言之就是你要懂點(diǎn)后端語(yǔ)言,這樣描述更直觀(guān)貼切。
  4)瀏覽器調試功能:學(xué)爬蟲(chóng)就是抓包,對懇求和響應進(jìn)行剖析,用代碼來(lái)模擬
  進(jìn)階爬蟲(chóng)
  熟練了基本爬蟲(chóng)以后,你會(huì )想著(zhù)獲取更多的數據,抓取更難的網(wǎng)站,然后你才會(huì )發(fā)覺(jué)獲取數據并不簡(jiǎn)單,而且現今反爬機制也十分的多。
  a.爬取知乎、簡(jiǎn)書(shū),需要登入并將上次的懇求時(shí)將sessions帶上,保持登入姿態(tài);
  b.爬取亞馬遜、京東、天貓等商品信息,由于信息量大、反爬機制建立,需要分布式【這里就難了】爬取,以及不斷切換USER_AGENT和代理IP;
  c.滑動(dòng)或下拉加載和同一url加載不同數據時(shí),涉及ajax的異步加載。這里可以有簡(jiǎn)單的返回html代碼、或者json數據,也可能有更變態(tài)的返回js代碼之后用瀏覽器執行,邏輯上很簡(jiǎn)單、但是寫(xiě)代碼那叫一個(gè)苦哇;
  d.還有點(diǎn)是須要面對的,驗證碼識別。這個(gè)有專(zhuān)門(mén)解析驗證碼的平臺.....不屬于爬蟲(chóng)范疇了,自己處理須要更多的數據剖析知識。
  e.數據存儲,關(guān)系數據庫和非關(guān)系數據庫的選擇和使用,設計防冗余數據庫表格,去重。大量數據儲存數據庫,會(huì )顯得太難受,
  f.編碼解碼問(wèn)題,數據的儲存涉及一個(gè)格式的問(wèn)題,python2或則3也就會(huì )涉及編碼問(wèn)題。另外網(wǎng)頁(yè)結構的不規范性,編碼格式的不同很容易觸發(fā)編碼異常問(wèn)題。下圖一個(gè)簡(jiǎn)單的轉碼規則
  
  一些常見(jiàn)的限制形式
  a.Basic Auth:一般會(huì )有用戶(hù)授權的限制,會(huì )在headers的Autheration數組里要求加入;
  b.Referer:通常是在訪(fǎng)問(wèn)鏈接時(shí),必須要帶上Referer數組,服務(wù)器會(huì )進(jìn)行驗證,例如抓取易迅的評論;
  c.User-Agent:會(huì )要求真是的設備,如果不加會(huì )用編程語(yǔ)言包里自有User-Agent,可以被辨認下來(lái);
  d.Cookie:一般在用戶(hù)登入或則個(gè)別操作后,服務(wù)端會(huì )在返回包中包含Cookie信息要求瀏覽器設置Cookie,沒(méi)有Cookie會(huì )很容易被辨認下來(lái)是偽造懇求;也有本地通過(guò)JS,根據服務(wù)端返回的某個(gè)信息進(jìn)行處理生成的加密信息,設置在Cookie上面;
  e.Gzip:請求headers上面帶了gzip,返回有時(shí)候會(huì )是gzip壓縮,需要解壓;
  f.JavaScript加密操作:一般都是在懇求的數據包內容上面會(huì )包含一些被javascript進(jìn)行加密限制的信息,例如新浪微博會(huì )進(jìn)行SHA1和RSA加密,之前是兩次SHA1加密,然后發(fā)送的密碼和用戶(hù)名就會(huì )被加密;
  g.網(wǎng)站自定義其他數組:因為http的headers可以自定義地段,所以第三方可能會(huì )加入了一些自定義的數組名稱(chēng)或則數組值,這也是須要注意的。
  真實(shí)的懇求過(guò)程中爬蟲(chóng)技術(shù),其實(shí)不止里面某一種限制,可能是幾種限制組合在一次,比如假如是類(lèi)似RSA加密的話(huà),可能先懇求服務(wù)器得到Cookie,然后再帶著(zhù)Cookie去懇求服務(wù)器領(lǐng)到私鑰,然后再用js進(jìn)行加密,再發(fā)送數據到服務(wù)器。所以弄清楚這其中的原理爬蟲(chóng)技術(shù),并且耐心剖析很重要。
  總結
  爬蟲(chóng)入門(mén)不難,但是須要知識面更廣和更多的耐心

dedecms,織夢(mèng)后臺系統配置參數空白的解決方

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 310 次瀏覽 ? 2020-04-15 11:04 ? 來(lái)自相關(guān)話(huà)題

  文章一:
  出現DedeCms系統配置參數空白緣由:
  1、還原數據庫引起的
  2、向數據庫導出數據時(shí)沒(méi)導出不全或數據某個(gè)文件被破壞
  最直接緣由是數據庫dede-sysconfig數據表大小為0或干脆不存在。
  解決辦法:
  方法一隨意在本地找個(gè)正常的dede數據庫,選中dede-sysconfig表,然后導入,然后再導出不顯示后臺參數的數據庫。即可解決
  方法二:重新還原一下數據庫
  方法三:網(wǎng)上提供的方式,在備份文件中總算在一個(gè)文件中找到如下圖的那種文件。
  3
  Ok,試試吧,把那種txt的數據備份文件上傳到服務(wù)器,這個(gè)時(shí)侯出現了那種表,然后選擇還原數據。
  懷疑當時(shí)還原表結構時(shí)弄丟的織夢(mèng)網(wǎng)站后臺參數,所以沒(méi)選還原表結構?;蛟S跟這個(gè)沒(méi)關(guān)系
  文章二:
  這樣情況的出現總使人嚇一跳,還好經(jīng)過(guò)一番思索過(guò)后找到了問(wèn)題所在。
  我的網(wǎng)站是先在本地布屬,然后再上傳到服務(wù)器上的。出現DedeCms系統配置參數空白的問(wèn)題之前,我同時(shí)登陸了服務(wù)器上的網(wǎng)站和本地布屬的網(wǎng)站,此時(shí)可 能就引起了cookie的沖突。我在訪(fǎng)問(wèn)本地網(wǎng)站的后臺的時(shí)侯發(fā)覺(jué)DedeCms系統配置參數空白,開(kāi)始的時(shí)侯考慮是文件出哪些問(wèn)題了。于是把沒(méi)有出錯的 服務(wù)器上的文件覆蓋到了本地,問(wèn)題還是沒(méi)有解決。想通過(guò)恢復數據庫試下能夠解決,但這時(shí)候發(fā)覺(jué)數據還原里居然沒(méi)有數據了??腦子在快速轉動(dòng),我真是太笨 了。備份的功能能夠用,我再備份一下瞧瞧文件會(huì )被備份到哪個(gè)地方織夢(mèng)網(wǎng)站后臺參數,備份過(guò)以后發(fā)覺(jué)居然是直接備份到了data下,不解。得了干脆直接把服務(wù)器上的緩存也直 接下出來(lái)瞧瞧。就在下完緩存以后發(fā)覺(jué)好了。從這我才覺(jué)得是cookie的沖突導致了這次的風(fēng)波。還好是虛驚一場(chǎng)。為此我還在網(wǎng)上搜索了一此除cookie 沖突導致DedeCms系統配置參數空白問(wèn)題的解決方式,供你們所需時(shí)備用。
  數據庫備份/還原后DedeCms系統配置參數出限空白解決方式
  修改你須要還原的數據庫dede_sysconfig_0_d08909f67460a7be.txt文件里的
  INSERTINTO`DEDE_sysconfig`VALUES('3','cfg_cookie_encode','cookie加密碼','2','string','JdCSr9155U');修改這個(gè)cookie加密碼和你安裝程序后臺的一樣.
  
  查看你安裝好的cookie加密碼方式如圖
  
  注意不是修改網(wǎng)站后臺的cookie加密碼為dede_sysconfig的加密碼
  改好進(jìn)行數據庫還原
  還原好了更新系統緩存在瞧瞧就可以了 查看全部
  文章一:
  出現DedeCms系統配置參數空白緣由:
  1、還原數據庫引起的
  2、向數據庫導出數據時(shí)沒(méi)導出不全或數據某個(gè)文件被破壞
  最直接緣由是數據庫dede-sysconfig數據表大小為0或干脆不存在。
  解決辦法:
  方法一隨意在本地找個(gè)正常的dede數據庫,選中dede-sysconfig表,然后導入,然后再導出不顯示后臺參數的數據庫。即可解決
  方法二:重新還原一下數據庫
  方法三:網(wǎng)上提供的方式,在備份文件中總算在一個(gè)文件中找到如下圖的那種文件。
  3
  Ok,試試吧,把那種txt的數據備份文件上傳到服務(wù)器,這個(gè)時(shí)侯出現了那種表,然后選擇還原數據。
  懷疑當時(shí)還原表結構時(shí)弄丟的織夢(mèng)網(wǎng)站后臺參數,所以沒(méi)選還原表結構?;蛟S跟這個(gè)沒(méi)關(guān)系
  文章二:
  這樣情況的出現總使人嚇一跳,還好經(jīng)過(guò)一番思索過(guò)后找到了問(wèn)題所在。
  我的網(wǎng)站是先在本地布屬,然后再上傳到服務(wù)器上的。出現DedeCms系統配置參數空白的問(wèn)題之前,我同時(shí)登陸了服務(wù)器上的網(wǎng)站和本地布屬的網(wǎng)站,此時(shí)可 能就引起了cookie的沖突。我在訪(fǎng)問(wèn)本地網(wǎng)站的后臺的時(shí)侯發(fā)覺(jué)DedeCms系統配置參數空白,開(kāi)始的時(shí)侯考慮是文件出哪些問(wèn)題了。于是把沒(méi)有出錯的 服務(wù)器上的文件覆蓋到了本地,問(wèn)題還是沒(méi)有解決。想通過(guò)恢復數據庫試下能夠解決,但這時(shí)候發(fā)覺(jué)數據還原里居然沒(méi)有數據了??腦子在快速轉動(dòng),我真是太笨 了。備份的功能能夠用,我再備份一下瞧瞧文件會(huì )被備份到哪個(gè)地方織夢(mèng)網(wǎng)站后臺參數,備份過(guò)以后發(fā)覺(jué)居然是直接備份到了data下,不解。得了干脆直接把服務(wù)器上的緩存也直 接下出來(lái)瞧瞧。就在下完緩存以后發(fā)覺(jué)好了。從這我才覺(jué)得是cookie的沖突導致了這次的風(fēng)波。還好是虛驚一場(chǎng)。為此我還在網(wǎng)上搜索了一此除cookie 沖突導致DedeCms系統配置參數空白問(wèn)題的解決方式,供你們所需時(shí)備用。
  數據庫備份/還原后DedeCms系統配置參數出限空白解決方式
  修改你須要還原的數據庫dede_sysconfig_0_d08909f67460a7be.txt文件里的
  INSERTINTO`DEDE_sysconfig`VALUES('3','cfg_cookie_encode','cookie加密碼','2','string','JdCSr9155U');修改這個(gè)cookie加密碼和你安裝程序后臺的一樣.
  
  查看你安裝好的cookie加密碼方式如圖
  
  注意不是修改網(wǎng)站后臺的cookie加密碼為dede_sysconfig的加密碼
  改好進(jìn)行數據庫還原
  還原好了更新系統緩存在瞧瞧就可以了

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

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 608 次瀏覽 ? 2020-07-24 08:00 ? 來(lái)自相關(guān)話(huà)題

  前言:一覺(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_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGSa3_pkMzadQg75Zhmxb9YI0psZvVepKtN4hpzQgtGa2iOlKKLwV_oxooGE6sxg1qinKxTb5VwJUcLBM1RgkzAPRtmyIGw2VAg..&amp;type=2&amp;query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&amp;k=92&amp;h=z
真實(shí)的文章url:
https://mp.weixin.qq.com/s?src=11&amp;timestamp=1573092595&amp;ver=1959&amp;signature=FjD709D-0vHSyVgQyXCS-TUAcnT0M9Gx6JljQEb6O55zpuyyDaTHqgkRCxNDtt5ZDifDRUUBOemzxcz71FMOmO88m6RWfR0r4fFBe0VefAsjFu0pl-M0frYOnXPF5JD8&amp;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% ... h%3DU
  method:GET
  請求參數:{"url":"dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNEnNekGBXt9LMduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGaBLLLEV3E0vo604DcwbvX2VNudQZNnBemevd34BJP94ZL5zUiA49LgzIjRlpGxccVxTTaLhHZKstaeqw41upSVAe0f8bRARvQ..","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/weixi ... 40108
    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/weixi ... %3Bbr />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/webse ... %3Bbr />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! 查看全部
  前言:一覺(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_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGSa3_pkMzadQg75Zhmxb9YI0psZvVepKtN4hpzQgtGa2iOlKKLwV_oxooGE6sxg1qinKxTb5VwJUcLBM1RgkzAPRtmyIGw2VAg..&amp;type=2&amp;query=%E5%92%B8%E8%9B%8B%E8%B6%85%E4%BA%BA&amp;k=92&amp;h=z
真實(shí)的文章url:
https://mp.weixin.qq.com/s?src=11&amp;timestamp=1573092595&amp;ver=1959&amp;signature=FjD709D-0vHSyVgQyXCS-TUAcnT0M9Gx6JljQEb6O55zpuyyDaTHqgkRCxNDtt5ZDifDRUUBOemzxcz71FMOmO88m6RWfR0r4fFBe0VefAsjFu0pl-M0frYOnXPF5JD8&amp;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”信息:
  抓包數據:
  urlhttps://weixin.sogou.com/link% ... h%3DU
  method:GET
  請求參數:{"url":"dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgSwqn5HZrcjUNEnNekGBXt9LMduzuCU92ulqXa8Fplpd9CqUiLuEm9hLLvBiu5ziMS196rgHYb-GzQfleG917OgwN_VAAdAZHKryCeU9lIxtWTKnLsDcsuPIjLhLEK3tbGaBLLLEV3E0vo604DcwbvX2VNudQZNnBemevd34BJP94ZL5zUiA49LgzIjRlpGxccVxTTaLhHZKstaeqw41upSVAe0f8bRARvQ..","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/weixi ... 40108
    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/weixi ... %3Bbr />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/webse ... %3Bbr />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!

Python爬蟲(chóng)借助cookie實(shí)現模擬登錄實(shí)例解讀

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 439 次瀏覽 ? 2020-07-05 08:00 ? 來(lái)自相關(guān)話(huà)題

  Cookie,指個(gè)別網(wǎng)站為了分辨用戶(hù)身分、進(jìn)行session跟蹤而存儲在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
  舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
  我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
  cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
  這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
  
  之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
  下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
  它們的關(guān)系:CookieJar —-派生—-&gt;FileCookieJar —-派生—–&gt;MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
  1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
  結果:
  
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
  這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
  2、將cookie保存到文件
  上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com") #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
  將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:
  
  CookieJar是沒(méi)有保存save屬性的~
  save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:
  
  這樣我們就成功保存了我們想要的cookie
  3、從文件中獲取cookie并訪(fǎng)問(wèn) 查看全部

  Cookie,指個(gè)別網(wǎng)站為了分辨用戶(hù)身分、進(jìn)行session跟蹤而存儲在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
  舉個(gè)事例,某些網(wǎng)站是須要登陸后就能得到你想要的信息的,不登錄只能是旅客模式,那么我們可以借助Urllib2庫保存我們曾經(jīng)登陸過(guò)的Cookie,之后載入cookie獲取我們想要的頁(yè)面,然后再進(jìn)行抓取。理解cookie主要是為我們快捷模擬登陸抓取目標網(wǎng)頁(yè)作出打算。
  我之前的貼子中使用過(guò)urlopen()這個(gè)函數來(lái)打開(kāi)網(wǎng)頁(yè)進(jìn)行抓取,這僅僅只是一個(gè)簡(jiǎn)單的Python網(wǎng)頁(yè)打開(kāi)器,其參數也僅有urlopen(url,data,timeout),這三個(gè)參數對于我們獲取目標網(wǎng)頁(yè)的cookie是遠遠不夠的。這時(shí)候我們就要借助到另外一種Opener——CookieJar。
  cookielib也是Python進(jìn)行爬蟲(chóng)的一個(gè)重要模塊python爬蟲(chóng)模擬登錄python爬蟲(chóng)模擬登錄,他能與urllib2互相結合一起爬取想要的內容。該模塊的CookieJar類(lèi)的對象可以捕獲cookie并在后續聯(lián)接懇求時(shí)重新發(fā)送,這樣就可以實(shí)現我們所須要的模擬登陸功能。
  這里非常說(shuō)明一下,cookielib是在py2.7中自帶的模塊,無(wú)需重新安裝,想要查看其自帶模塊可以查看Python目錄下的Lib文件夾,里面有所有安裝的模塊。我一開(kāi)始沒(méi)想起來(lái),在pycharm中居然沒(méi)有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
  
  之后才想起來(lái)是不是自帶的就有,沒(méi)想到去lib文件夾一看還真有,白白浪費半個(gè)小時(shí)各類(lèi)瞎折騰~~
  下面我們就來(lái)介紹一下這個(gè)模塊,該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
  它們的關(guān)系:CookieJar —-派生—-&gt;FileCookieJar —-派生—–&gt;MozillaCookieJar和LWPCookieJar 主要用法,我們下邊也會(huì )提到。urllib2.urlopen()函數不支持驗證、cookie或則其它HTTP中級功能。要支持這種功能,必須使用build_opener()(可以用于使python程序模擬瀏覽器進(jìn)行訪(fǎng)問(wèn),作用你懂得~)函數創(chuàng )建自定義Opener對象。
  1、首先我們就來(lái)獲取一下網(wǎng)站的cookie
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.CookieJar() #聲明一個(gè)CookieJar的類(lèi)對象保存cookie(注意CookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com";) #opener返回的一個(gè)應答對象response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
  結果:
  
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
  這樣我們就得到了一個(gè)最簡(jiǎn)單的cookie。
  2、將cookie保存到文件
  上面我們得到了cookie,下面我們學(xué)習怎么保存cookie。在這里我們使用它的泛型MozillaCookieJar來(lái)實(shí)現Cookie的保存
  例子:
  
#coding=utf-8
import cookielib
import urllib2

mycookie = cookielib.MozillaCookieJar() #聲明一個(gè)MozillaCookieJar的類(lèi)對象保存cookie(注意MozillaCookieJar的大小寫(xiě)問(wèn)題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來(lái)聲明一個(gè)處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來(lái)構造opener,opener的用法和urlopen()類(lèi)似
response = opener.open("http://www.baidu.com";) #opener返回的一個(gè)應答對象response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定保存的文件名
mycookie.save(filename,ignore_discard=True, ignore_expires=True)
  將里面的事例簡(jiǎn)單變型就可以得到本例,使用了CookieJar的泛型MozillaCookiJar,為什么呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你能夠明白:
  
  CookieJar是沒(méi)有保存save屬性的~
  save()這個(gè)方式中:ignore_discard的意思是雖然cookies將被遺棄也將它保存出來(lái),ignore_expires的意思是假如在該文件中cookies早已存在,則覆蓋原文件寫(xiě)入,在這里,我們將這兩個(gè)全部設置為T(mén)rue。運行以后,cookies將被保存到cookie.txt文件中,我們查看一下內容:
  
  這樣我們就成功保存了我們想要的cookie
  3、從文件中獲取cookie并訪(fǎng)問(wèn)

Python借助requests進(jìn)行模擬登陸

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 648 次瀏覽 ? 2020-06-25 08:00 ? 來(lái)自相關(guān)話(huà)題

  
  Python3 模擬登陸并爬取表格數據!
  本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
  使用python模擬登陸
  使用python模擬登陸Windows + Linux 均成功
  Python模擬一個(gè)用戶(hù)登入系統
  題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...
  
  使用python模擬瀏覽器實(shí)現登錄
  讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
  Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
  前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
  Python模擬百度登陸
  注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
  任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
  知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
  python實(shí)現模擬登陸
  本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...
  
  請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
  比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
  requests 實(shí)現模擬登陸,獲取cookie
  有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
  Python模擬登錄
  最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
  Python模擬登陸的幾種方式
  目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
  用Python模擬登陸中學(xué)教務(wù)系統搶課
  -- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
  Python爬蟲(chóng)之模擬登陸總結
  備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
  python模擬瀏覽器登陸
  轉自:
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
  Visual C++技術(shù)內幕(第四版).part4.rar下載
  一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
  sap施行顧問(wèn)寶典2下載
  sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
  Xilinx_ise使用教程(配合Modelsim使用)下載
  這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
  相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
  我們是太有底線(xiàn)的 查看全部
  
  Python3 模擬登陸并爬取表格數據!
  本節主要內容有:通過(guò)requests庫模擬表單遞交通過(guò)pandas庫提取網(wǎng)頁(yè)表格上周五,大師兄發(fā)給我一個(gè)網(wǎng)址,哭哭啼啼地求我:“去!把這個(gè)網(wǎng)頁(yè)上所有年所有市所有小麥的數據全爬出來(lái),存到Access里!”我看他可憐,勉為其難地揮揮手說(shuō):“好嘞,馬上就開(kāi)始!”目標剖析Python學(xué)習交流群:1004391443大師兄給我的網(wǎng)址是這個(gè):
  使用python模擬登陸
  使用python模擬登陸Windows + Linux 均成功
  Python模擬一個(gè)用戶(hù)登入系統
  題目:模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統直接上代碼:#模擬一個(gè)用戶(hù)登入系統,用戶(hù)輸入用戶(hù)名和密碼,輸入正確即可步入系統d=['yao','123456']while 1:name =input("請輸入用戶(hù)名:")if name in d:breakelse:print("你輸入的用戶(hù)名不存在,請...
  
  使用python模擬瀏覽器實(shí)現登錄
  讓我們通過(guò)命令行模擬瀏覽器實(shí)現登錄操作,看看一個(gè)簡(jiǎn)單的登錄操作,具體是怎樣實(shí)現的
  Python爬蟲(chóng)入門(mén)-表單遞交與模擬登陸
  前言明天主要講兩個(gè)方面:利用Request庫進(jìn)行POST懇求表單交互cookie實(shí)現模擬登陸網(wǎng)站Requests實(shí)現POST懇求今requests可以以多種形式進(jìn)行post懇求,比如form表單方式、json方式等。今天主要以表單方式舉例:Reqeusts支持以form表單方式發(fā)送post懇求,只須要將懇求的參數構造成一個(gè)字典,然后傳給requests.post()...
  Python模擬百度登陸
  注:本文轉載,如有侵權,請告知將給以刪掉原文章鏈接:本來(lái)寫(xiě)這個(gè)玩意是想拿來(lái)手動(dòng)登入百度,然后按照帖吧內的的排行抓取會(huì )員頭像的,比如生成一個(gè)帖吧萬(wàn)人頭像圖或千人頭像圖。也算是練練手。完成后才發(fā)覺(jué)抓那種帖吧排行完全不需要登陸…也好,以后拿來(lái)做手動(dòng)一鍵簽到(經(jīng)常忘打卡),搶二樓哪些的,也...
  任務(wù)自動(dòng)化_request 模擬登陸實(shí)戰
  知識點(diǎn):request 帶密碼登入、selenium+headless Chrome、pandas、思路:request 爬蟲(chóng)模擬登陸,下載文檔,再用 pandas 進(jìn)行數據剖析
  python實(shí)現模擬登陸
  本文主要用python實(shí)現了對網(wǎng)站的模擬登陸。通過(guò)自己構造post數據來(lái)用Python實(shí)現登陸過(guò)程。當你要模擬登陸一個(gè)網(wǎng)站時(shí),首先要搞清楚網(wǎng)站的登陸處理細節(發(fā)了什么樣的數據,給誰(shuí)發(fā)等...)。我是通過(guò)HTTPfox來(lái)抓取http數據包來(lái)剖析該網(wǎng)站的登陸流程。同時(shí),我們還要剖析抓到的post包的數據結構和header,要按照遞交的數據結構和heander來(lái)構造自己的pos...
  
  請問(wèn)寫(xiě)python爬蟲(chóng)怎樣用urllib或則requests模擬用戶(hù)登入
  比如我在百度文庫下個(gè)教案,,我用urllib2或則request,我可以用urllib2.open(url)或者requests.get(url)來(lái)打開(kāi)頁(yè)面,但是不知道怎么寫(xiě)cookie的,就是使瀏覽器覺(jué)得你早已登陸了,請問(wèn)怎么寫(xiě)urllib或則requests.get呢?謝謝
  requests 實(shí)現模擬登陸,獲取cookie
  有個(gè)需求須要模擬登陸csdn獲取cookie,對csdn進(jìn)行后續系列操作,剛開(kāi)始使用的selenium,功能可以實(shí)現,但是效率有點(diǎn)低,后來(lái)改用的requests,遇到不少坑,今天來(lái)總結一下。首先找到csdn登陸的url,在故意輸錯密碼的情況下點(diǎn)擊登陸,檢查會(huì )發(fā)覺(jué)network中有一個(gè)dologin的響應,這就是要遞交到服務(wù)器的帳號密碼信息。點(diǎn)開(kāi)會(huì )發(fā)覺(jué)下圖所示:請求的url,請求方法p...
  Python模擬登錄
  最近想做一個(gè)可以模擬人工,對網(wǎng)站的內容進(jìn)行操作,比如手動(dòng)購物,自動(dòng)支付。朋友向我推薦用Python去寫(xiě)python爬蟲(chóng)模擬登錄,我也就開(kāi)始用Python??戳艘恍┐蠹s,用Python3 的requests去弄,感覺(jué)邏輯很簡(jiǎn)單。最主要的問(wèn)題是怎樣去剖析網(wǎng)站的邏輯,這很難。用了chrome f12 記錄網(wǎng)頁(yè)的操作,但是一點(diǎn)是,chrome不能全文查找,沒(méi)辦法搜索到諸如帳號密碼的傳送,cookie等問(wèn)題,手動(dòng)查找好煩。
  Python模擬登陸的幾種方式
  目錄方式一:直接使用已知的cookie訪(fǎng)問(wèn)技巧二:模擬登陸后再攜帶得到的cookie訪(fǎng)問(wèn)方式三:模擬登陸后用session保持登入狀態(tài)方式四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)正文方式一:直接使用已知的cookie訪(fǎng)問(wèn)特征:簡(jiǎn)單,但須要先在瀏覽器登陸原理:簡(jiǎn)單地說(shuō),cookie保存在發(fā)起懇求的客戶(hù)端中,服務(wù)器借助cookie來(lái)分辨不同的客戶(hù)端。因為htt...
  用Python模擬登陸中學(xué)教務(wù)系統搶課
  -- Illustrations by Vladislav Solovjov --作者:小蘇打博客地址:地址:github....
  Python爬蟲(chóng)之模擬登陸總結
  備注:python 2.7.9,32位有些網(wǎng)站需要登入后才會(huì )爬取所須要的信息python爬蟲(chóng)模擬登錄,此時(shí)可以設計爬蟲(chóng)進(jìn)行模擬登陸,原理是借助瀏覽器cookie。一、瀏覽器訪(fǎng)問(wèn)服務(wù)器的過(guò)程: (1)瀏覽器(客戶(hù)端)向Web服務(wù)器發(fā)出一個(gè)HTTP請求(Http request); (2)Web服務(wù)器收到懇求,發(fā)回響應信息(Http Response); (3)瀏覽器解析內容呈現
  python模擬瀏覽器登陸
  轉自:
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)
  python3下使用requests實(shí)現模擬用戶(hù)登入 —— 基礎篇(馬蜂窩)1. 了解cookie和session首先一定要先了解到cookie和session是哪些,這是前面理解網(wǎng)站交互,模擬用戶(hù)登入的基礎。1.1. 無(wú)狀態(tài)合同:Http如上圖所示,HTTP合同 是無(wú)狀態(tài)的合同,用戶(hù)瀏覽服務(wù)器上的內容,只須要發(fā)送頁(yè)面懇求,服務(wù)器返回內容。對于服務(wù)器來(lái)說(shuō),并不關(guān)心,也...
  Visual C++技術(shù)內幕(第四版).part4.rar下載
  一個(gè)十分清淅的PDF版的Visual C++技術(shù)黑幕(第四版),至于這本書(shū)究竟有多強就不用我介紹了吧!本書(shū)共分part1、part2、part3、part4 四部份相關(guān)下載鏈接:
  sap施行顧問(wèn)寶典2下載
  sap施行顧問(wèn)寶典一共3個(gè)壓縮包挺好的東西。相關(guān)下載鏈接:
  Xilinx_ise使用教程(配合Modelsim使用)下載
  這是我搜集的一個(gè)Xilinx_ISE6.1的教程,結合了MODELSIM的仿真功能,自己覺(jué)得講解的還可以,適合初學(xué)者入門(mén)使用,對其他人員也有一定的參考價(jià)值。相關(guān)下載鏈接:
  相關(guān)熱詞c# 程序跳轉c#索引器定義、c#掃描軟件c# 文字復印左右反轉c#byte轉換成數字c# 音量調節組件c# wpf 界面c# 讀取證書(shū)文件的內容c# dgv 樹(shù)結構c#承繼 反序列化
  我們是太有底線(xiàn)的

【php爬蟲(chóng)】百萬(wàn)級別知乎用戶(hù)數據爬取與剖析

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 286 次瀏覽 ? 2020-06-14 08:03 ? 來(lái)自相關(guān)話(huà)題

  代碼托管地址:
  文/Hector
  這次抓取了110萬(wàn)的用戶(hù)數據php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,數據剖析結果如下:
  開(kāi)發(fā)前的打算
  安裝linux系統(Ubuntu14.04),在VMWare虛擬機下安裝一個(gè)Ubuntu;
  安裝PHP5.6或以上版本;
  安裝curl、pcntl擴充。
  使用PHP的curl擴充抓取頁(yè)面數據
  PHP的curl擴充是PHP支持的容許你與各類(lèi)服務(wù)器使用各類(lèi)類(lèi)型的合同進(jìn)行聯(lián)接和通訊的庫。
  本程序是抓取知乎的用戶(hù)數據,要能訪(fǎng)問(wèn)用戶(hù)個(gè)人頁(yè)面,需要用戶(hù)登陸后的能夠訪(fǎng)問(wèn)。當我們在瀏覽器的頁(yè)面中點(diǎn)擊一個(gè)用戶(hù)頭像鏈接步入用戶(hù)個(gè)人中心頁(yè)面的時(shí)侯,之所以還能看見(jiàn)用戶(hù)的信息,是因為在點(diǎn)擊鏈接的時(shí)侯,瀏覽器幫你將本地的cookie帶上一同遞交到新的頁(yè)面,所以你才能步入到用戶(hù)的個(gè)人中心頁(yè)面。因此實(shí)現訪(fǎng)問(wèn)個(gè)人頁(yè)面之前須要先獲得用戶(hù)的cookie信息,然后在每次curl懇求的時(shí)侯帶上cookie信息。在獲取cookie信息方面,我是用了自己的cookie,在頁(yè)面中可以看見(jiàn)自己的cookie信息:
  一個(gè)個(gè)地復制,以"__utma=?;__utmb=?;"這樣的方式組成一個(gè)cookie字符串。接下來(lái)就可以使用該cookie字符串來(lái)發(fā)送懇求。
  初始的示例:
   $url = ''; <br /> //此處mora-hu代表用戶(hù)ID
$ch = curl_init($url); <br /> //初始化會(huì )話(huà)
curl_setopt($ch, CURLOPT_HEADER, 0); <br /> curl_setopt($ch, CURLOPT_COOKIE, $this-&gt;config_arr['user_cookie']); <br /> //設置請求COOKIE
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); <br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); <br /> //將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); <br /> $result = curl_exec($ch); <br /> return $result; //抓取的結果
  運行里面的代碼可以獲得mora-hu用戶(hù)的個(gè)人中心頁(yè)面。利用該結果再使用正則表達式對頁(yè)面進(jìn)行處理,就能獲取到姓名,性別等所須要抓取的信息。
  圖片防盜鏈
  在對返回結果進(jìn)行正則處理后輸出個(gè)人信息的時(shí)侯,發(fā)現在頁(yè)面中輸出用戶(hù)頭像時(shí)難以打開(kāi)。經(jīng)過(guò)查閱資料獲知,是因為知乎對圖片做了防盜鏈處理。解決方案就是懇求圖片的時(shí)侯在懇求頭里偽造一個(gè)referer。
  在使用正則表達式獲取到圖片的鏈接以后,再發(fā)一次懇求,這時(shí)候帶上圖片懇求的來(lái)源,說(shuō)明該懇求來(lái)自知乎網(wǎng)站的轉發(fā)。具體事例如下:
  function getImg($url, $u_id){ <br /> if (file_exists('./images/' . $u_id . ".jpg")) <br /> { <br /> return "images/$u_id" . '.jpg'; } if (empty($url)) <br /> { <br /> return ''; <br /> }<br /> $context_options = array( <br /> 'http' =&gt;
array(<br /> 'header' =&gt; "Referer:"//帶上referer參數
  )<br />  );<br /> $context = stream_context_create($context_options);<br /> $img = file_get_contents('http:' . $url, FALSE, $context);<br /> file_put_contents('./images/' . $u_id . ".jpg", $img);<br /> return "images/$u_id" . '.jpg';}
  爬取更多用戶(hù)
  抓取了自己的個(gè)人信息后,就須要再訪(fǎng)問(wèn)用戶(hù)的關(guān)注者和關(guān)注了的用戶(hù)列表獲取更多的用戶(hù)信息。然后一層一層地訪(fǎng)問(wèn)??梢砸?jiàn)到,在個(gè)人中心頁(yè)面里,有兩個(gè)鏈接如下:
  這里有兩個(gè)鏈接,一個(gè)是關(guān)注了,另一個(gè)是關(guān)注者,以“關(guān)注了”的鏈接為例。用正則匹配去匹配到相應的鏈接,得到url以后用curl帶上cookie再發(fā)一次懇求。抓取到用戶(hù)關(guān)注了的用于列表頁(yè)以后,可以得到下邊的頁(yè)面:
  分析頁(yè)面的html結構php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,因為只要得到用戶(hù)的信息,所以只須要框住的這一塊的div內容,用戶(hù)名都在這上面??梢钥匆?jiàn),用戶(hù)關(guān)注了的頁(yè)面的url是:
  不同的用戶(hù)的這個(gè)url幾乎是一樣的,不同的地方就在于用戶(hù)名哪里。用正則匹配領(lǐng)到用戶(hù)名列表,一個(gè)一個(gè)地拼url,然后再挨個(gè)發(fā)懇求(當然,一個(gè)一個(gè)是比較慢的,下面有解決方案,這個(gè)稍后會(huì )說(shuō)到)。進(jìn)入到新用戶(hù)的頁(yè)面然后,再重復前面的步驟,就這樣不斷循環(huán),直到達到你所要的數據量。 查看全部

  代碼托管地址:
  文/Hector
  這次抓取了110萬(wàn)的用戶(hù)數據php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,數據剖析結果如下:
  開(kāi)發(fā)前的打算
  安裝linux系統(Ubuntu14.04),在VMWare虛擬機下安裝一個(gè)Ubuntu;
  安裝PHP5.6或以上版本;
  安裝curl、pcntl擴充。
  使用PHP的curl擴充抓取頁(yè)面數據
  PHP的curl擴充是PHP支持的容許你與各類(lèi)服務(wù)器使用各類(lèi)類(lèi)型的合同進(jìn)行聯(lián)接和通訊的庫。
  本程序是抓取知乎的用戶(hù)數據,要能訪(fǎng)問(wèn)用戶(hù)個(gè)人頁(yè)面,需要用戶(hù)登陸后的能夠訪(fǎng)問(wèn)。當我們在瀏覽器的頁(yè)面中點(diǎn)擊一個(gè)用戶(hù)頭像鏈接步入用戶(hù)個(gè)人中心頁(yè)面的時(shí)侯,之所以還能看見(jiàn)用戶(hù)的信息,是因為在點(diǎn)擊鏈接的時(shí)侯,瀏覽器幫你將本地的cookie帶上一同遞交到新的頁(yè)面,所以你才能步入到用戶(hù)的個(gè)人中心頁(yè)面。因此實(shí)現訪(fǎng)問(wèn)個(gè)人頁(yè)面之前須要先獲得用戶(hù)的cookie信息,然后在每次curl懇求的時(shí)侯帶上cookie信息。在獲取cookie信息方面,我是用了自己的cookie,在頁(yè)面中可以看見(jiàn)自己的cookie信息:
  一個(gè)個(gè)地復制,以"__utma=?;__utmb=?;"這樣的方式組成一個(gè)cookie字符串。接下來(lái)就可以使用該cookie字符串來(lái)發(fā)送懇求。
  初始的示例:
   $url = ''; <br /> //此處mora-hu代表用戶(hù)ID
$ch = curl_init($url); <br /> //初始化會(huì )話(huà)
curl_setopt($ch, CURLOPT_HEADER, 0); <br /> curl_setopt($ch, CURLOPT_COOKIE, $this-&gt;config_arr['user_cookie']); <br /> //設置請求COOKIE
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); <br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); <br /> //將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); <br /> $result = curl_exec($ch); <br /> return $result; //抓取的結果
  運行里面的代碼可以獲得mora-hu用戶(hù)的個(gè)人中心頁(yè)面。利用該結果再使用正則表達式對頁(yè)面進(jìn)行處理,就能獲取到姓名,性別等所須要抓取的信息。
  圖片防盜鏈
  在對返回結果進(jìn)行正則處理后輸出個(gè)人信息的時(shí)侯,發(fā)現在頁(yè)面中輸出用戶(hù)頭像時(shí)難以打開(kāi)。經(jīng)過(guò)查閱資料獲知,是因為知乎對圖片做了防盜鏈處理。解決方案就是懇求圖片的時(shí)侯在懇求頭里偽造一個(gè)referer。
  在使用正則表達式獲取到圖片的鏈接以后,再發(fā)一次懇求,這時(shí)候帶上圖片懇求的來(lái)源,說(shuō)明該懇求來(lái)自知乎網(wǎng)站的轉發(fā)。具體事例如下:
  function getImg($url, $u_id){ <br /> if (file_exists('./images/' . $u_id . ".jpg")) <br /> { <br /> return "images/$u_id" . '.jpg'; } if (empty($url)) <br /> { <br /> return ''; <br /> }<br /> $context_options = array( <br /> 'http' =&gt;
array(<br /> 'header' =&gt; "Referer:"//帶上referer參數
  )<br />  );<br /> $context = stream_context_create($context_options);<br /> $img = file_get_contents('http:' . $url, FALSE, $context);<br /> file_put_contents('./images/' . $u_id . ".jpg", $img);<br /> return "images/$u_id" . '.jpg';}
  爬取更多用戶(hù)
  抓取了自己的個(gè)人信息后,就須要再訪(fǎng)問(wèn)用戶(hù)的關(guān)注者和關(guān)注了的用戶(hù)列表獲取更多的用戶(hù)信息。然后一層一層地訪(fǎng)問(wèn)??梢砸?jiàn)到,在個(gè)人中心頁(yè)面里,有兩個(gè)鏈接如下:
  這里有兩個(gè)鏈接,一個(gè)是關(guān)注了,另一個(gè)是關(guān)注者,以“關(guān)注了”的鏈接為例。用正則匹配去匹配到相應的鏈接,得到url以后用curl帶上cookie再發(fā)一次懇求。抓取到用戶(hù)關(guān)注了的用于列表頁(yè)以后,可以得到下邊的頁(yè)面:
  分析頁(yè)面的html結構php 網(wǎng)絡(luò )爬蟲(chóng) 抓取數據,因為只要得到用戶(hù)的信息,所以只須要框住的這一塊的div內容,用戶(hù)名都在這上面??梢钥匆?jiàn),用戶(hù)關(guān)注了的頁(yè)面的url是:
  不同的用戶(hù)的這個(gè)url幾乎是一樣的,不同的地方就在于用戶(hù)名哪里。用正則匹配領(lǐng)到用戶(hù)名列表,一個(gè)一個(gè)地拼url,然后再挨個(gè)發(fā)懇求(當然,一個(gè)一個(gè)是比較慢的,下面有解決方案,這個(gè)稍后會(huì )說(shuō)到)。進(jìn)入到新用戶(hù)的頁(yè)面然后,再重復前面的步驟,就這樣不斷循環(huán),直到達到你所要的數據量。

老司機帶你學(xué)爬蟲(chóng)——Python爬蟲(chóng)技術(shù)分享

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 303 次瀏覽 ? 2020-05-06 08:01 ? 來(lái)自相關(guān)話(huà)題

  什么是“爬蟲(chóng)”?
  簡(jiǎn)單來(lái)說(shuō),寫(xiě)一個(gè)從web上獲取須要數據并按規定格式儲存的程序就叫爬蟲(chóng);
  爬蟲(chóng)理論上步驟很簡(jiǎn)單,第一步獲取html源碼,第二步剖析html并領(lǐng)到數據。但實(shí)際操作,老麻煩了~
  用Python寫(xiě)“爬蟲(chóng)”有什么便捷的庫
  常用網(wǎng)路懇求庫:requests、urllib、urllib2、
  urllib和urllib2是Python自帶模塊,requests是第三方庫
  常用解析庫和爬蟲(chóng)框架:BeautifulSoup、lxml、HTMLParser、selenium、Scrapy
  HTMLParser是Python自帶模塊;
  BeautifulSoup可以將html解析成Python句型對象,直接操作對象會(huì )十分便捷;
  lxml可以解析xml和html標簽語(yǔ)言,優(yōu)點(diǎn)是速度快;
  selenium調用瀏覽器的driver,通過(guò)這個(gè)庫你可以直接調用瀏覽器完成個(gè)別操作,比如輸入驗證碼;
  Scrapy太強悍且有名的爬蟲(chóng)框架,可以輕松滿(mǎn)足簡(jiǎn)單網(wǎng)站的爬??;這個(gè)python學(xué)習(q-u-n):二二七,四三五,四五零 期待你們一起交流討論,講實(shí)話(huà)還是一個(gè)特別適宜學(xué)習的地方的。軟件各類(lèi)入門(mén)資料
  “爬蟲(chóng)”需要把握什么知識
  1)超文本傳輸協(xié)議HTTP:HTTP合同定義了瀏覽器如何向萬(wàn)維網(wǎng)服務(wù)器懇求萬(wàn)維網(wǎng)文檔,以及服務(wù)器如何把文檔傳送給瀏覽器。常用的HTTP方式有GET、POST、PUT、DELETE。
  【插曲:某站長(cháng)做了一個(gè)網(wǎng)站,奇葩的他把刪掉的操作綁定在GET懇求上。百度或則微軟爬蟲(chóng)爬取網(wǎng)站鏈接,都是用的GET懇求,而且通常用瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè)都是GET懇求。在微軟爬蟲(chóng)爬取他網(wǎng)站的信息時(shí),該網(wǎng)站自動(dòng)刪掉了數據庫的全部數據】
  2)統一資源定位符URL: URL是拿來(lái)表示從因特網(wǎng)上得到的資源位置和訪(fǎng)問(wèn)那些資源的方式。URL給資源的位置提供一種具象的辨識方式,并用這些方式給資源定位。只要才能對資源定位,系統就可以對資源進(jìn)行各類(lèi)操作,如存取、更新、替換和查找其屬性。URL相當于一個(gè)文件名在網(wǎng)路范圍的擴充。
  3)超文本標記語(yǔ)言HTTP:HTML指的是超文本標記語(yǔ)言,是使用標記標簽來(lái)描述網(wǎng)頁(yè)的。HTML文檔包含HTML標簽和純文本,也稱(chēng)為網(wǎng)頁(yè)。Web 瀏覽器的作用是讀取 HTML 文檔,并以網(wǎng)頁(yè)的方式顯示出它們。瀏覽器不會(huì )顯示 HTML 標簽,而是使用標簽來(lái)解釋頁(yè)面的內容。簡(jiǎn)而言之就是你要懂點(diǎn)后端語(yǔ)言,這樣描述更直觀(guān)貼切。
  4)瀏覽器調試功能:學(xué)爬蟲(chóng)就是抓包,對懇求和響應進(jìn)行剖析,用代碼來(lái)模擬
  進(jìn)階爬蟲(chóng)
  熟練了基本爬蟲(chóng)以后,你會(huì )想著(zhù)獲取更多的數據,抓取更難的網(wǎng)站,然后你才會(huì )發(fā)覺(jué)獲取數據并不簡(jiǎn)單,而且現今反爬機制也十分的多。
  a.爬取知乎、簡(jiǎn)書(shū),需要登入并將上次的懇求時(shí)將sessions帶上,保持登入姿態(tài);
  b.爬取亞馬遜、京東、天貓等商品信息,由于信息量大、反爬機制建立,需要分布式【這里就難了】爬取,以及不斷切換USER_AGENT和代理IP;
  c.滑動(dòng)或下拉加載和同一url加載不同數據時(shí),涉及ajax的異步加載。這里可以有簡(jiǎn)單的返回html代碼、或者json數據,也可能有更變態(tài)的返回js代碼之后用瀏覽器執行,邏輯上很簡(jiǎn)單、但是寫(xiě)代碼那叫一個(gè)苦哇;
  d.還有點(diǎn)是須要面對的,驗證碼識別。這個(gè)有專(zhuān)門(mén)解析驗證碼的平臺.....不屬于爬蟲(chóng)范疇了,自己處理須要更多的數據剖析知識。
  e.數據存儲,關(guān)系數據庫和非關(guān)系數據庫的選擇和使用,設計防冗余數據庫表格,去重。大量數據儲存數據庫,會(huì )顯得太難受,
  f.編碼解碼問(wèn)題,數據的儲存涉及一個(gè)格式的問(wèn)題,python2或則3也就會(huì )涉及編碼問(wèn)題。另外網(wǎng)頁(yè)結構的不規范性,編碼格式的不同很容易觸發(fā)編碼異常問(wèn)題。下圖一個(gè)簡(jiǎn)單的轉碼規則
  
  一些常見(jiàn)的限制形式
  a.Basic Auth:一般會(huì )有用戶(hù)授權的限制,會(huì )在headers的Autheration數組里要求加入;
  b.Referer:通常是在訪(fǎng)問(wèn)鏈接時(shí),必須要帶上Referer數組,服務(wù)器會(huì )進(jìn)行驗證,例如抓取易迅的評論;
  c.User-Agent:會(huì )要求真是的設備,如果不加會(huì )用編程語(yǔ)言包里自有User-Agent,可以被辨認下來(lái);
  d.Cookie:一般在用戶(hù)登入或則個(gè)別操作后,服務(wù)端會(huì )在返回包中包含Cookie信息要求瀏覽器設置Cookie,沒(méi)有Cookie會(huì )很容易被辨認下來(lái)是偽造懇求;也有本地通過(guò)JS,根據服務(wù)端返回的某個(gè)信息進(jìn)行處理生成的加密信息,設置在Cookie上面;
  e.Gzip:請求headers上面帶了gzip,返回有時(shí)候會(huì )是gzip壓縮,需要解壓;
  f.JavaScript加密操作:一般都是在懇求的數據包內容上面會(huì )包含一些被javascript進(jìn)行加密限制的信息,例如新浪微博會(huì )進(jìn)行SHA1和RSA加密,之前是兩次SHA1加密,然后發(fā)送的密碼和用戶(hù)名就會(huì )被加密;
  g.網(wǎng)站自定義其他數組:因為http的headers可以自定義地段,所以第三方可能會(huì )加入了一些自定義的數組名稱(chēng)或則數組值,這也是須要注意的。
  真實(shí)的懇求過(guò)程中爬蟲(chóng)技術(shù),其實(shí)不止里面某一種限制,可能是幾種限制組合在一次,比如假如是類(lèi)似RSA加密的話(huà),可能先懇求服務(wù)器得到Cookie,然后再帶著(zhù)Cookie去懇求服務(wù)器領(lǐng)到私鑰,然后再用js進(jìn)行加密,再發(fā)送數據到服務(wù)器。所以弄清楚這其中的原理爬蟲(chóng)技術(shù),并且耐心剖析很重要。
  總結
  爬蟲(chóng)入門(mén)不難,但是須要知識面更廣和更多的耐心 查看全部

  什么是“爬蟲(chóng)”?
  簡(jiǎn)單來(lái)說(shuō),寫(xiě)一個(gè)從web上獲取須要數據并按規定格式儲存的程序就叫爬蟲(chóng);
  爬蟲(chóng)理論上步驟很簡(jiǎn)單,第一步獲取html源碼,第二步剖析html并領(lǐng)到數據。但實(shí)際操作,老麻煩了~
  用Python寫(xiě)“爬蟲(chóng)”有什么便捷的庫
  常用網(wǎng)路懇求庫:requests、urllib、urllib2、
  urllib和urllib2是Python自帶模塊,requests是第三方庫
  常用解析庫和爬蟲(chóng)框架:BeautifulSoup、lxml、HTMLParser、selenium、Scrapy
  HTMLParser是Python自帶模塊;
  BeautifulSoup可以將html解析成Python句型對象,直接操作對象會(huì )十分便捷;
  lxml可以解析xml和html標簽語(yǔ)言,優(yōu)點(diǎn)是速度快;
  selenium調用瀏覽器的driver,通過(guò)這個(gè)庫你可以直接調用瀏覽器完成個(gè)別操作,比如輸入驗證碼;
  Scrapy太強悍且有名的爬蟲(chóng)框架,可以輕松滿(mǎn)足簡(jiǎn)單網(wǎng)站的爬??;這個(gè)python學(xué)習(q-u-n):二二七,四三五,四五零 期待你們一起交流討論,講實(shí)話(huà)還是一個(gè)特別適宜學(xué)習的地方的。軟件各類(lèi)入門(mén)資料
  “爬蟲(chóng)”需要把握什么知識
  1)超文本傳輸協(xié)議HTTP:HTTP合同定義了瀏覽器如何向萬(wàn)維網(wǎng)服務(wù)器懇求萬(wàn)維網(wǎng)文檔,以及服務(wù)器如何把文檔傳送給瀏覽器。常用的HTTP方式有GET、POST、PUT、DELETE。
  【插曲:某站長(cháng)做了一個(gè)網(wǎng)站,奇葩的他把刪掉的操作綁定在GET懇求上。百度或則微軟爬蟲(chóng)爬取網(wǎng)站鏈接,都是用的GET懇求,而且通常用瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè)都是GET懇求。在微軟爬蟲(chóng)爬取他網(wǎng)站的信息時(shí),該網(wǎng)站自動(dòng)刪掉了數據庫的全部數據】
  2)統一資源定位符URL: URL是拿來(lái)表示從因特網(wǎng)上得到的資源位置和訪(fǎng)問(wèn)那些資源的方式。URL給資源的位置提供一種具象的辨識方式,并用這些方式給資源定位。只要才能對資源定位,系統就可以對資源進(jìn)行各類(lèi)操作,如存取、更新、替換和查找其屬性。URL相當于一個(gè)文件名在網(wǎng)路范圍的擴充。
  3)超文本標記語(yǔ)言HTTP:HTML指的是超文本標記語(yǔ)言,是使用標記標簽來(lái)描述網(wǎng)頁(yè)的。HTML文檔包含HTML標簽和純文本,也稱(chēng)為網(wǎng)頁(yè)。Web 瀏覽器的作用是讀取 HTML 文檔,并以網(wǎng)頁(yè)的方式顯示出它們。瀏覽器不會(huì )顯示 HTML 標簽,而是使用標簽來(lái)解釋頁(yè)面的內容。簡(jiǎn)而言之就是你要懂點(diǎn)后端語(yǔ)言,這樣描述更直觀(guān)貼切。
  4)瀏覽器調試功能:學(xué)爬蟲(chóng)就是抓包,對懇求和響應進(jìn)行剖析,用代碼來(lái)模擬
  進(jìn)階爬蟲(chóng)
  熟練了基本爬蟲(chóng)以后,你會(huì )想著(zhù)獲取更多的數據,抓取更難的網(wǎng)站,然后你才會(huì )發(fā)覺(jué)獲取數據并不簡(jiǎn)單,而且現今反爬機制也十分的多。
  a.爬取知乎、簡(jiǎn)書(shū),需要登入并將上次的懇求時(shí)將sessions帶上,保持登入姿態(tài);
  b.爬取亞馬遜、京東、天貓等商品信息,由于信息量大、反爬機制建立,需要分布式【這里就難了】爬取,以及不斷切換USER_AGENT和代理IP;
  c.滑動(dòng)或下拉加載和同一url加載不同數據時(shí),涉及ajax的異步加載。這里可以有簡(jiǎn)單的返回html代碼、或者json數據,也可能有更變態(tài)的返回js代碼之后用瀏覽器執行,邏輯上很簡(jiǎn)單、但是寫(xiě)代碼那叫一個(gè)苦哇;
  d.還有點(diǎn)是須要面對的,驗證碼識別。這個(gè)有專(zhuān)門(mén)解析驗證碼的平臺.....不屬于爬蟲(chóng)范疇了,自己處理須要更多的數據剖析知識。
  e.數據存儲,關(guān)系數據庫和非關(guān)系數據庫的選擇和使用,設計防冗余數據庫表格,去重。大量數據儲存數據庫,會(huì )顯得太難受,
  f.編碼解碼問(wèn)題,數據的儲存涉及一個(gè)格式的問(wèn)題,python2或則3也就會(huì )涉及編碼問(wèn)題。另外網(wǎng)頁(yè)結構的不規范性,編碼格式的不同很容易觸發(fā)編碼異常問(wèn)題。下圖一個(gè)簡(jiǎn)單的轉碼規則
  
  一些常見(jiàn)的限制形式
  a.Basic Auth:一般會(huì )有用戶(hù)授權的限制,會(huì )在headers的Autheration數組里要求加入;
  b.Referer:通常是在訪(fǎng)問(wèn)鏈接時(shí),必須要帶上Referer數組,服務(wù)器會(huì )進(jìn)行驗證,例如抓取易迅的評論;
  c.User-Agent:會(huì )要求真是的設備,如果不加會(huì )用編程語(yǔ)言包里自有User-Agent,可以被辨認下來(lái);
  d.Cookie:一般在用戶(hù)登入或則個(gè)別操作后,服務(wù)端會(huì )在返回包中包含Cookie信息要求瀏覽器設置Cookie,沒(méi)有Cookie會(huì )很容易被辨認下來(lái)是偽造懇求;也有本地通過(guò)JS,根據服務(wù)端返回的某個(gè)信息進(jìn)行處理生成的加密信息,設置在Cookie上面;
  e.Gzip:請求headers上面帶了gzip,返回有時(shí)候會(huì )是gzip壓縮,需要解壓;
  f.JavaScript加密操作:一般都是在懇求的數據包內容上面會(huì )包含一些被javascript進(jìn)行加密限制的信息,例如新浪微博會(huì )進(jìn)行SHA1和RSA加密,之前是兩次SHA1加密,然后發(fā)送的密碼和用戶(hù)名就會(huì )被加密;
  g.網(wǎng)站自定義其他數組:因為http的headers可以自定義地段,所以第三方可能會(huì )加入了一些自定義的數組名稱(chēng)或則數組值,這也是須要注意的。
  真實(shí)的懇求過(guò)程中爬蟲(chóng)技術(shù),其實(shí)不止里面某一種限制,可能是幾種限制組合在一次,比如假如是類(lèi)似RSA加密的話(huà),可能先懇求服務(wù)器得到Cookie,然后再帶著(zhù)Cookie去懇求服務(wù)器領(lǐng)到私鑰,然后再用js進(jìn)行加密,再發(fā)送數據到服務(wù)器。所以弄清楚這其中的原理爬蟲(chóng)技術(shù),并且耐心剖析很重要。
  總結
  爬蟲(chóng)入門(mén)不難,但是須要知識面更廣和更多的耐心

dedecms,織夢(mèng)后臺系統配置參數空白的解決方

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 310 次瀏覽 ? 2020-04-15 11:04 ? 來(lái)自相關(guān)話(huà)題

  文章一:
  出現DedeCms系統配置參數空白緣由:
  1、還原數據庫引起的
  2、向數據庫導出數據時(shí)沒(méi)導出不全或數據某個(gè)文件被破壞
  最直接緣由是數據庫dede-sysconfig數據表大小為0或干脆不存在。
  解決辦法:
  方法一隨意在本地找個(gè)正常的dede數據庫,選中dede-sysconfig表,然后導入,然后再導出不顯示后臺參數的數據庫。即可解決
  方法二:重新還原一下數據庫
  方法三:網(wǎng)上提供的方式,在備份文件中總算在一個(gè)文件中找到如下圖的那種文件。
  3
  Ok,試試吧,把那種txt的數據備份文件上傳到服務(wù)器,這個(gè)時(shí)侯出現了那種表,然后選擇還原數據。
  懷疑當時(shí)還原表結構時(shí)弄丟的織夢(mèng)網(wǎng)站后臺參數,所以沒(méi)選還原表結構?;蛟S跟這個(gè)沒(méi)關(guān)系
  文章二:
  這樣情況的出現總使人嚇一跳,還好經(jīng)過(guò)一番思索過(guò)后找到了問(wèn)題所在。
  我的網(wǎng)站是先在本地布屬,然后再上傳到服務(wù)器上的。出現DedeCms系統配置參數空白的問(wèn)題之前,我同時(shí)登陸了服務(wù)器上的網(wǎng)站和本地布屬的網(wǎng)站,此時(shí)可 能就引起了cookie的沖突。我在訪(fǎng)問(wèn)本地網(wǎng)站的后臺的時(shí)侯發(fā)覺(jué)DedeCms系統配置參數空白,開(kāi)始的時(shí)侯考慮是文件出哪些問(wèn)題了。于是把沒(méi)有出錯的 服務(wù)器上的文件覆蓋到了本地,問(wèn)題還是沒(méi)有解決。想通過(guò)恢復數據庫試下能夠解決,但這時(shí)候發(fā)覺(jué)數據還原里居然沒(méi)有數據了??腦子在快速轉動(dòng),我真是太笨 了。備份的功能能夠用,我再備份一下瞧瞧文件會(huì )被備份到哪個(gè)地方織夢(mèng)網(wǎng)站后臺參數,備份過(guò)以后發(fā)覺(jué)居然是直接備份到了data下,不解。得了干脆直接把服務(wù)器上的緩存也直 接下出來(lái)瞧瞧。就在下完緩存以后發(fā)覺(jué)好了。從這我才覺(jué)得是cookie的沖突導致了這次的風(fēng)波。還好是虛驚一場(chǎng)。為此我還在網(wǎng)上搜索了一此除cookie 沖突導致DedeCms系統配置參數空白問(wèn)題的解決方式,供你們所需時(shí)備用。
  數據庫備份/還原后DedeCms系統配置參數出限空白解決方式
  修改你須要還原的數據庫dede_sysconfig_0_d08909f67460a7be.txt文件里的
  INSERTINTO`DEDE_sysconfig`VALUES('3','cfg_cookie_encode','cookie加密碼','2','string','JdCSr9155U');修改這個(gè)cookie加密碼和你安裝程序后臺的一樣.
  
  查看你安裝好的cookie加密碼方式如圖
  
  注意不是修改網(wǎng)站后臺的cookie加密碼為dede_sysconfig的加密碼
  改好進(jìn)行數據庫還原
  還原好了更新系統緩存在瞧瞧就可以了 查看全部
  文章一:
  出現DedeCms系統配置參數空白緣由:
  1、還原數據庫引起的
  2、向數據庫導出數據時(shí)沒(méi)導出不全或數據某個(gè)文件被破壞
  最直接緣由是數據庫dede-sysconfig數據表大小為0或干脆不存在。
  解決辦法:
  方法一隨意在本地找個(gè)正常的dede數據庫,選中dede-sysconfig表,然后導入,然后再導出不顯示后臺參數的數據庫。即可解決
  方法二:重新還原一下數據庫
  方法三:網(wǎng)上提供的方式,在備份文件中總算在一個(gè)文件中找到如下圖的那種文件。
  3
  Ok,試試吧,把那種txt的數據備份文件上傳到服務(wù)器,這個(gè)時(shí)侯出現了那種表,然后選擇還原數據。
  懷疑當時(shí)還原表結構時(shí)弄丟的織夢(mèng)網(wǎng)站后臺參數,所以沒(méi)選還原表結構?;蛟S跟這個(gè)沒(méi)關(guān)系
  文章二:
  這樣情況的出現總使人嚇一跳,還好經(jīng)過(guò)一番思索過(guò)后找到了問(wèn)題所在。
  我的網(wǎng)站是先在本地布屬,然后再上傳到服務(wù)器上的。出現DedeCms系統配置參數空白的問(wèn)題之前,我同時(shí)登陸了服務(wù)器上的網(wǎng)站和本地布屬的網(wǎng)站,此時(shí)可 能就引起了cookie的沖突。我在訪(fǎng)問(wèn)本地網(wǎng)站的后臺的時(shí)侯發(fā)覺(jué)DedeCms系統配置參數空白,開(kāi)始的時(shí)侯考慮是文件出哪些問(wèn)題了。于是把沒(méi)有出錯的 服務(wù)器上的文件覆蓋到了本地,問(wèn)題還是沒(méi)有解決。想通過(guò)恢復數據庫試下能夠解決,但這時(shí)候發(fā)覺(jué)數據還原里居然沒(méi)有數據了??腦子在快速轉動(dòng),我真是太笨 了。備份的功能能夠用,我再備份一下瞧瞧文件會(huì )被備份到哪個(gè)地方織夢(mèng)網(wǎng)站后臺參數,備份過(guò)以后發(fā)覺(jué)居然是直接備份到了data下,不解。得了干脆直接把服務(wù)器上的緩存也直 接下出來(lái)瞧瞧。就在下完緩存以后發(fā)覺(jué)好了。從這我才覺(jué)得是cookie的沖突導致了這次的風(fēng)波。還好是虛驚一場(chǎng)。為此我還在網(wǎng)上搜索了一此除cookie 沖突導致DedeCms系統配置參數空白問(wèn)題的解決方式,供你們所需時(shí)備用。
  數據庫備份/還原后DedeCms系統配置參數出限空白解決方式
  修改你須要還原的數據庫dede_sysconfig_0_d08909f67460a7be.txt文件里的
  INSERTINTO`DEDE_sysconfig`VALUES('3','cfg_cookie_encode','cookie加密碼','2','string','JdCSr9155U');修改這個(gè)cookie加密碼和你安裝程序后臺的一樣.
  
  查看你安裝好的cookie加密碼方式如圖
  
  注意不是修改網(wǎng)站后臺的cookie加密碼為dede_sysconfig的加密碼
  改好進(jìn)行數據庫還原
  還原好了更新系統緩存在瞧瞧就可以了

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

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