Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
話說(shuō)的好,“明槍易躲暗箭難防”就算我們?cè)傩⌒囊矔?huì)因?yàn)楦鞣N各樣的事情出現(xiàn)疏忽大意的情況,輕則財(cái)產(chǎn)損失,重則人身安全受到傷害。但是不要以為這些問(wèn)題只會(huì)出現(xiàn)在我們的現(xiàn)實(shí)生活中,就算在互聯(lián)網(wǎng)上也不例外。以我們經(jīng)常會(huì)用到的微博軟件來(lái)說(shuō),經(jīng)常會(huì)有人中招。下面讓我們來(lái)詳細(xì)的看一下吧。
雖然我們經(jīng)常能從家附近的廣播里或者賣菜阿姨那里聽到“要求網(wǎng)上匯款的都是騙子”“網(wǎng)上鏈接不要隨便點(diǎn)”之類的,甚至次數(shù)多的聽到耳朵都快長(zhǎng)繭了。但我們自認(rèn)為飽讀四書五經(jīng),對(duì)各種防騙教材背的滾瓜爛熟,對(duì)各種騙術(shù)已經(jīng)免疫了。但事實(shí)上,在微博上被“騙”的最多的往往是這類人。更多詳細(xì)內(nèi)容可自行度娘 萬(wàn)臣知乎進(jìn)行咨詢。可不要以為微博上就是萬(wàn)無(wú)一失的,自古以來(lái)就沒(méi)有萬(wàn)無(wú)一失的壁壘,總會(huì)有人找到漏洞可以鉆過(guò)去。
如果我們?cè)诠湮⒉┑臅r(shí)候,看見帶有鏈接的奇怪微博的話,一定不要出于好奇就點(diǎn)進(jìn)去。特別是一些看上去像推廣游戲的微博,以前就曾出現(xiàn)過(guò)在官方微博賬號(hào)下的推出的鏈接,被從事IT行業(yè)的業(yè)內(nèi)大佬在做了很多方面的調(diào)查測(cè)試后,發(fā)現(xiàn)該鏈接雖然點(diǎn)進(jìn)去與正常的游戲網(wǎng)頁(yè)一模一樣,但是發(fā)現(xiàn)該網(wǎng)站的管理員在通過(guò)一些技術(shù)手段之后可以將后臺(tái)權(quán)限出售給他人,供他人獲取網(wǎng)友的信息。另外在與網(wǎng)頁(yè)內(nèi)部留下的聯(lián)系方式進(jìn)行溝通后,獲取了相關(guān)的源代碼信息,發(fā)現(xiàn)售賣者在源代碼里留了一個(gè)‘后門’,這樣除了直接用這個(gè)網(wǎng)站騙取信息的人,售賣者也可以利用‘后門’來(lái)獲取被騙取的信息,這個(gè)‘后門’行為屬于‘黑吃黑’。”
上面這類就屬于釣魚詐騙網(wǎng)站:偽裝成銀行、電子商務(wù)、微博、游戲等網(wǎng)站,與真實(shí)網(wǎng)站界面完全一致,要求訪問(wèn)者提交帳號(hào)和密碼的網(wǎng)站。以此來(lái)騙取用戶的相關(guān)帳號(hào)、密碼等信息,造成隱私泄露和財(cái)產(chǎn)損失。對(duì)于這種情況我們可以在官方網(wǎng)站進(jìn)行操作,切忌在其他第三方平臺(tái)點(diǎn)擊,因?yàn)檫@樣做一旦出了問(wèn)題就可以直接與官方進(jìn)行確認(rèn)介入調(diào)查,而在第三方平臺(tái),發(fā)布者可能會(huì)以各種看似很牽強(qiáng)但是又很合理的借口進(jìn)行開脫。這次我們就先講到這里,下次我們?cè)賮?lái)講講其他需要注意的地方。
近事情比較多,所以從上周就開始寫的新浪微博爬蟲一直拖到了現(xiàn)在,不過(guò)不得不說(shuō)新浪微博的反扒,我只想說(shuō)我真的服氣了。
向右奔跑老大說(shuō)這次的就不限制要爬取哪些內(nèi)容了,但是給一個(gè)參考,有興趣的可以搞一搞:
參考想法
當(dāng)我看到這個(gè)的時(shí)候感覺很有意思和搞頭就想去整一整,所以我的一個(gè)想法就是去找一個(gè)粉絲比較多的人去解析他的分析信息,然后再去解析他粉絲的粉絲,以此類推(感覺解析初始用戶的關(guān)注的人的粉絲會(huì)更好一點(diǎn),因?yàn)樗姆劢z比較多,他關(guān)注的人粉絲量肯定不會(huì)小),但是到后來(lái)我就想放棄這個(gè)想法了,因?yàn)橛龅降膯?wèn)題真的一大堆,好了廢話不多說(shuō),來(lái)看一下我抓取的信息:
抓取的信息:
1.微博標(biāo)題
2.微博nickname
3.標(biāo)識(shí)id
4.微博等級(jí)
5.地區(qū)
6.畢業(yè)院校
7.關(guān)注量+URL
8.粉絲量+URL
9.微博量+URL
大致獲取的也就這么多信息,因?yàn)楹芏嗳说男畔⑹遣煌晟频模跃拖茸ミ@么多進(jìn)行測(cè)試。
確定了我們要找的信息,接下來(lái)就是去解析網(wǎng)頁(yè)了(一個(gè)大的難題要出現(xiàn)了),在我看來(lái)獲取網(wǎng)頁(yè)目前遇到的:1.解析源碼,2.抓包(json),但是新浪微博這個(gè)就比較煩了,他這個(gè)是在js中,并且是未加載的(只能用正則或者selenium模擬瀏覽器了),看到這個(gè)之后我想了一段時(shí)間并且問(wèn)了羅羅攀 有沒(méi)有其他的方法,不行我就用selenium,他說(shuō)還是推薦正則,解析快一點(diǎn),selenium是最后的選擇,沒(méi)辦法了只好硬著頭皮去寫正則了,這里在測(cè)試正則是否正確,可以使用在線測(cè)試工具,進(jìn)行正則的測(cè)試,不必去一遍又一遍運(yùn)行代碼。
源碼+個(gè)人信息
關(guān)注+粉絲+微博
找到這些信息,盯著源碼一直瞅,看的我頭都大了,其實(shí)又快捷的方法ctrl+f
搜索框
現(xiàn)在信息的位置我們都清楚在哪了,那么就是寫匹配信息的正則了,這個(gè)只能是自己慢慢去寫,可以練習(xí)正則表達(dá)式。
URL+粉絲分頁(yè)問(wèn)題
個(gè)人主頁(yè)URL
我們先來(lái)看一個(gè)示例:http://weibo.com/p/1005051497035431/home?from=page_100505&mod=TAB&is_hot=1#place,
這個(gè)URL,給大家提個(gè)醒直接用這個(gè)是看不到主頁(yè)信息的,但是在代碼的測(cè)試源碼中我們能看到一個(gè)location重定向的連接,是將#之后的部分替換為&retcode=6102,所以URL應(yīng)該為:http://weibo.com/p/1005051497035431/home?from=page_100505&mod=TAB&is_hot=1&retcode=6102,
我點(diǎn)擊連接測(cè)試了一下,看到的內(nèi)容和第一條連接一樣,并且還有一點(diǎn),我們之后獲取的所有連接都要替換#之后的內(nèi)容,來(lái)一個(gè)示例吧:
urls = re.findall(r'class=\"t_link S_txt1\" href=\"(.*?)\"',data)
如果不進(jìn)行替換,我們拿獲取后的仍然是無(wú)法獲取到我們要的源碼。
我本想可以解析一個(gè)人的粉絲,就可以獲取大量的數(shù)據(jù),可還是栽在了系統(tǒng)限制(我在爬取的時(shí)候第五頁(yè)之后就返回不到數(shù)據(jù))
系統(tǒng)限制
看到這個(gè)之后,系統(tǒng)限制,這個(gè)又是什么,好吧只能看100個(gè)粉絲的信息,沒(méi)辦法了也只能繼續(xù)寫下去。所以說(shuō)我們只要考慮5頁(yè)的數(shù)據(jù),總頁(yè)數(shù)大于5頁(yè)按五頁(yè)對(duì)待,小于5頁(yè)的正常去寫就可以,這個(gè)搞明白之后,就是要去解決分頁(yè)的連接了,通過(guò)三條URL進(jìn)行對(duì)比:
1.http://weibo.com/p/1005051110411735/follow?relate=fans&from=100505&wvr=6&mod=headfans¤t=fans#place
2.http://weibo.com/p/1005051110411735/follow?relate=fans&page=2#Pl_Official_HisRelation__60
2.http://weibo.com/p/1005051110411735/follow?relate=fans&page=3#Pl_Official_HisRelation__60
通過(guò)這兩個(gè)URL我們可以看出,差別就在后半部分,除了之前我說(shuō)的要將是將#之后的部分替換為&retcode=6102,之外還要改動(dòng)一點(diǎn),就是follow?之后的內(nèi)容那么改動(dòng)后,我們就從第二頁(yè)去構(gòu)造URL。
示例代碼:
urls = ['http://weibo.com/p/1005051497035431/follow?relate=fans&page={}&retcode=6102'.format(i) for i in range(2,int(pages)+1)]
那么URL分頁(yè)問(wèn)題就搞定了,也可以說(shuō)解決了一個(gè)難題。如果你認(rèn)為新浪微博只有這些反扒的話,就太天真了,讓我們接著往下看。
布滿荊棘的路
整個(gè)獲取過(guò)程就是各種坑,之前主要是說(shuō)了數(shù)據(jù)的獲取方式和URL及粉絲分頁(yè)的問(wèn)題,現(xiàn)在我們來(lái)看一下新浪微博的一些反扒:
首先,在請(qǐng)求的時(shí)候必須加cookies進(jìn)行身份驗(yàn)證,這個(gè)挺正常的,但是在這來(lái)說(shuō)他真的不是萬(wàn)能的,因?yàn)閏ookie也是有生存期的,這個(gè)在獲取個(gè)人信息的時(shí)候還沒(méi)什么問(wèn)題,但是在獲取粉絲頁(yè)面信息的時(shí)候就出現(xiàn)了過(guò)期的問(wèn)題,那該怎么解決呢,想了很久,最后通過(guò)selenium模擬登錄解決了,這個(gè)之后在詳細(xì)說(shuō),總之,這一點(diǎn)要注意。
然后,另外一個(gè)點(diǎn),不是每一個(gè)人的源碼都是一樣的,怎么說(shuō)呢最明顯的自己可以去對(duì)比下,登錄微博后看一下自己粉絲的分頁(yè)那部分源碼和你搜索的那個(gè)用戶的源碼一樣不,除此之外其他的源碼信息也有不一樣,我真的指向說(shuō)一句,大公司就是厲害。
用戶源碼
自己本人的源碼
大家自習(xí)看應(yīng)該可以看出來(lái)不同,所以整體來(lái)說(shuō)新浪微博挺難爬。
代碼
代碼這一塊,確實(shí)沒(méi)整好,問(wèn)題也比較多,但是可以把核心代碼貼出來(lái)供大家參考和探討(感覺自己寫的有點(diǎn)亂)
說(shuō)一下代碼結(jié)構(gòu),兩個(gè)主類和三個(gè)輔助類:
兩個(gè)主類:第一個(gè)類去解析粉絲id,另一個(gè)類去解析詳細(xì)信息(解析的時(shí)候會(huì)判斷id是否解析過(guò))
三個(gè)輔助類:第一個(gè)去模擬登陸返回cookies(再爬取數(shù)據(jù)的過(guò)程中,好像是只調(diào)用了一次,可能是代碼的問(wèn)題),第二個(gè)輔助類去返回一個(gè)隨機(jī)代理,第三個(gè)輔助類將個(gè)人信息寫入MySQL。
下邊我就將兩個(gè)主類的源碼貼出來(lái),把輔助類相關(guān)其他的信息去掉仍然是可以運(yùn)行的。
1.fansSpider.py
#-*- coding:utf-8 -*-import requestsimport reimport randomfrom proxy import Proxyfrom getCookie import COOKIEfrom time import sleepfrom store_mysql import Mysqlfrom weibo_spider import weiboSpiderclass fansSpider(object):
中間注釋的一部分,因?yàn)榇a在調(diào)試,大家參考正則和一些處理方式即可
2.weibo_spider.py
# -*- coding:utf-8 -*-import requestsimport refrom store_mysql import Mysqlimport MySQLdbclass weiboSpider(object):
寫的比較亂,大家將就著看,還是我說(shuō)的只是一個(gè)Demo
輔助類之一(存mysql,可以參考Mr_Cxy的python對(duì)Mysql數(shù)據(jù)庫(kù)的操作小例),其他的兩個(gè)關(guān)于隨機(jī)代理和獲取cookie,在下篇文章會(huì)詳細(xì)講解
運(yùn)行結(jié)果+數(shù)據(jù)結(jié)果
測(cè)試結(jié)果
運(yùn)行截圖
200為狀態(tài)碼,說(shuō)明請(qǐng)求成功
總結(jié)
目前新浪微博是遇到問(wèn)題最多的一個(gè),不過(guò)也學(xué)到了很多知識(shí),比如正則表達(dá)式,隨機(jī)代理等等,在學(xué)習(xí)的過(guò)程中就是遇到的問(wèn)題越多,積累的越多,進(jìn)步越快,所以遇到問(wèn)題和出錯(cuò)也是幸事。說(shuō)一下代碼運(yùn)行過(guò)程中存在遇到的問(wèn)題吧(可以一塊交流解決):
1.有兩個(gè)id一直在循環(huán),可能是循環(huán)那一塊存在問(wèn)題,可以一塊交流,解決后會(huì)更新文章。
2.解析的速度(單線程比較慢,后續(xù)寫scrapy版)
3.去重(目前是在將解析過(guò)的id寫入數(shù)據(jù)庫(kù),然后在解析前進(jìn)行判斷)
T之家 8 月 9 日消息,今天晚間,新版微博網(wǎng)頁(yè)端出現(xiàn)問(wèn)題,無(wú)法訪問(wèn),重啟網(wǎng)頁(yè)后會(huì)自動(dòng)進(jìn)入舊版微博網(wǎng)頁(yè)。
IT之家注意到,舊版微博網(wǎng)頁(yè)仍有切換至新版的按鈕,但是點(diǎn)擊會(huì)出現(xiàn)“網(wǎng)絡(luò)超時(shí)”的提示。
目前,微博暫未就此事做出回應(yīng)。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。