HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    爬蟲爬取高頻關鍵詞(python爬蟲爬取關鍵詞頻率)

    發(fā)布時間:2023-04-22 00:15:49     稿源: 創(chuàng)意嶺    閱讀: 112        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于爬蟲爬取高頻關鍵詞的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    爬蟲爬取高頻關鍵詞(python爬蟲爬取關鍵詞頻率)

    一、python爬蟲是什么

    Python爬蟲是指在某種原因進行互聯(lián)網(wǎng)請求獲取信息

    二、Python爬蟲可以爬取什么

    Python爬蟲可以爬取的東西有很多,Python爬蟲怎么學?簡單的分析下:

    如果你仔細觀察,就不難發(fā)現(xiàn),懂爬蟲、學習爬蟲的人越來越多,一方面,互聯(lián)網(wǎng)可以獲取的數(shù)據(jù)越來越多,另一方面,像 Python這樣的編程語言提供越來越多的優(yōu)秀工具,讓爬蟲變得簡單、容易上手。

    利用爬蟲我們可以獲取大量的價值數(shù)據(jù),從而獲得感性認識中不能得到的信息,比如:

    知乎:爬取優(yōu)質答案,為你篩選出各話題下最優(yōu)質的內容。

    淘寶、京東:抓取商品、評論及銷量數(shù)據(jù),對各種商品及用戶的消費場景進行分析。

    安居客、鏈家:抓取房產(chǎn)買賣及租售信息,分析房價變化趨勢、做不同區(qū)域的房價分析。

    拉勾網(wǎng)、智聯(lián):爬取各類職位信息,分析各行業(yè)人才需求情況及薪資水平。

    雪球網(wǎng):抓取雪球高回報用戶的行為,對股票市場進行分析和預測。

    爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如后臺開發(fā)、web開發(fā)、科學計算等等,但爬蟲對于初學者而言更友好,原理簡單,幾行代碼就能實現(xiàn)基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。

    掌握基本的爬蟲后,你再去學習Python數(shù)據(jù)分析、web開發(fā)甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。

    對于小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通 Python,然后哼哧哼哧系統(tǒng)學習 Python 的每個知識點,很久之后發(fā)現(xiàn)仍然爬不了數(shù)據(jù);有的人則認為先要掌握網(wǎng)頁的知識,遂開始 HTMLCSS,結果入了前端的坑,瘁……

    但掌握正確的方法,在短時間內做到能夠爬取主流網(wǎng)站的數(shù)據(jù),其實非常容易實現(xiàn),但建議你從一開始就要有一個具體的目標。

    在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。

    1.學習 Python 包并實現(xiàn)基本的爬蟲過程

    2.了解非結構化數(shù)據(jù)的存儲

    3.學習scrapy,搭建工程化爬蟲

    4.學習數(shù)據(jù)庫知識,應對大規(guī)模數(shù)據(jù)存儲與提取

    5.掌握各種技巧,應對特殊網(wǎng)站的反爬措施

    6.分布式爬蟲,實現(xiàn)大規(guī)模并發(fā)采集,提升效率

    學習 Python 包并實現(xiàn)基本的爬蟲過程

    大部分爬蟲都是按“發(fā)送請求——獲得頁面——解析頁面——抽取并儲存內容”這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網(wǎng)頁信息的過程。

    Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議從requests+Xpath 開始,requests 負責連接網(wǎng)站,返回網(wǎng)頁,Xpath 用于解析網(wǎng)頁,便于抽取數(shù)據(jù)。

    如果你用過 BeautifulSoup,會發(fā)現(xiàn) Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話下,豆瓣、糗事百科、騰訊新聞等基本上都可以上手了。

    當然如果你需要爬取異步加載的網(wǎng)站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現(xiàn)自動化,這樣,知乎、時光網(wǎng)、貓途鷹這些動態(tài)的網(wǎng)站也可以迎刃而解。

    了解非結構化數(shù)據(jù)的存儲

    爬回來的數(shù)據(jù)可以直接用文檔形式存在本地,也可以存入數(shù)據(jù)庫中。

    開始數(shù)據(jù)量不大的時候,你可以直接通過 Python 的語法或 pandas 的方法將數(shù)據(jù)存為csv這樣的文件。

    當然你可能發(fā)現(xiàn)爬回來的數(shù)據(jù)并不是干凈的,可能會有缺失、錯誤等等,你還需要對數(shù)據(jù)進行清洗,可以學習 pandas 包的基本用法來做數(shù)據(jù)的預處理,得到更干凈的數(shù)據(jù)。

    學習 scrapy,搭建工程化的爬蟲

    掌握前面的技術一般量級的數(shù)據(jù)和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的 scrapy 框架就非常有用了。

    scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。

    學會 scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。

    學習數(shù)據(jù)庫基礎,應對大規(guī)模數(shù)據(jù)存儲

    爬回來的數(shù)據(jù)量小的時候,你可以用文檔的形式來存儲,一旦數(shù)據(jù)量大了,這就有點行不通了。所以掌握一種數(shù)據(jù)庫是必須的,學習目前比較主流的 MongoDB 就OK。

    MongoDB 可以方便你去存儲一些非結構化的數(shù)據(jù),比如各種評論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。

    因為這里要用到的數(shù)據(jù)庫知識其實非常簡單,主要是數(shù)據(jù)如何入庫、如何進行提取,在需要的時候再學習就行。

    掌握各種技巧,應對特殊網(wǎng)站的反爬措施

    當然,爬蟲過程中也會經(jīng)歷一些絕望啊,比如被網(wǎng)站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態(tài)加載等等。

    遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規(guī)的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。

    往往網(wǎng)站在高效開發(fā)和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網(wǎng)站已經(jīng)難不到你了.

    分布式爬蟲,實現(xiàn)大規(guī)模并發(fā)采集

    爬取基本數(shù)據(jù)已經(jīng)不是問題了,你的瓶頸會集中到爬取海量數(shù)據(jù)的效率。這個時候,相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。

    分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具。

    Scrapy 前面我們說過了,用于做基本的頁面爬取,MongoDB 用于存儲爬取的數(shù)據(jù),Redis 則用來存儲要爬取的網(wǎng)頁隊列,也就是任務隊列。

    所以有些東西看起來很嚇人,但其實分解開來,也不過如此。當你能夠寫分布式的爬蟲的時候,那么你可以去嘗試打造一些基本的爬蟲架構了,實現(xiàn)一些更加自動化的數(shù)據(jù)獲取。

    你看,這一條學習路徑下來,你已然可以成為老司機了,非常的順暢。所以在一開始的時候,盡量不要系統(tǒng)地去啃一些東西,找一個實際的項目(開始可以從豆瓣、小豬這種簡單的入手),直接開始就好。

    因為爬蟲這種技術,既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數(shù)據(jù)庫技術,高效的姿勢就是從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。

    當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的一個大問題。

    以上就是我的回答,希望對你有所幫助,望采納。

    三、python 新浪微博爬蟲,求助

    0x00. 起因

    因為參加學校大學生創(chuàng)新競賽,研究有關微博博文表達的情緒,需要大量微博博文,而網(wǎng)上無論是國內的某度、csdn,還是國外谷歌、gayhub、codeproject等都找不到想要的程序,沒辦法只能自己寫一個程序了。

    ps.在爬盟找到類似的程序,但是是windows下的,并且閉源,而且最終爬取保存的文件用notepad++打開有很多奇怪的問題,所以放棄了。

    0x01. 基礎知識

    本程序由Python寫成,所以基本的python知識是必須的。另外,如果你有一定的計算機網(wǎng)絡基礎,在前期準備時會有少走很多彎路。

    對于爬蟲,需要明確幾點:

    1. 對爬取對象分類,可以分為以下幾種:第一種是不需要登錄的,比如博主以前練手時爬的中國天氣網(wǎng),這種網(wǎng)頁爬取難度較低,建議爬蟲新手爬這類網(wǎng)頁;第二種是需要登錄的,如豆瓣、新浪微博,這些網(wǎng)頁爬取難度較高;第三種獨立于前兩種,你想要的信息一般是動態(tài)刷新的,如AJAX或內嵌資源,這種爬蟲難度最大,博主也沒研究過,在此不細舉(據(jù)同學說淘寶的商品評論就屬于這類)。

    2. 如果同一個數(shù)據(jù)源有多種形式(比如電腦版、手機版、客戶端等),優(yōu)先選取較為“純凈的”展現(xiàn)。比如新浪微博,有網(wǎng)頁版,也有手機版,而且手機版可以用電腦瀏覽器訪問,這時我優(yōu)先選手機版新浪微博。

    3. 爬蟲一般是將網(wǎng)頁下載到本地,再通過某些方式提取出感興趣的信息。也就是說,爬取網(wǎng)頁只完成了一半,你還要將你感興趣的信息從下載下來的html文件中提取出來。這時就需要一些xml的知識了,在這個項目中,博主用的是XPath提取信息,另外可以使用XQuery等等其他技術,詳情請訪問w3cschool。

    4. 爬蟲應該盡量模仿人類,現(xiàn)在網(wǎng)站反爬機制已經(jīng)比較發(fā)達,從驗證碼到禁IP,爬蟲技術和反爬技術可謂不斷博弈。

    0x02. 開始

    決定了爬蟲的目標之后,首先應該訪問目標網(wǎng)頁,明確目標網(wǎng)頁屬于上述幾種爬蟲的哪種,另外,記錄為了得到感興趣的信息你需要進行的步驟,如是否需要登錄,如果需要登錄,是否需要驗證碼;你要進行哪些操作才能獲得希望得到的信息,是否需要提交某些表單;你希望得到的信息所在頁面的url有什么規(guī)律等等。

    以下博文以博主項目為例,該項目爬取特定新浪微博用戶從注冊至今的所有微博博文和根據(jù)關鍵詞爬取100頁微博博文(大約1000條)。

    0x03. 收集必要信息

    首先訪問目標網(wǎng)頁,發(fā)現(xiàn)需要登錄,進入登錄頁面如下新浪微博手機版登錄頁面

    注意url后半段有很多形如”%xx”的轉義字符,本文后面將會講到。

    從這個頁面可以看到,登錄新浪微博手機版需要填寫賬號、密碼和驗證碼。

    這個驗證碼是近期(本文創(chuàng)作于2016.3.11)才需要提供的,如果不需要提供驗證碼的話,將有兩種方法進行登錄。

    第一種是填寫賬號密碼之后執(zhí)行js模擬點擊“登錄”按鈕,博主之前寫過一個Java爬蟲就是利用這個方法,但是現(xiàn)在找不到工程了,在此不再贅述。

    第二種需要一定HTTP基礎,提交包含所需信息的HTTP POST請求。我們需要Wireshark 工具來抓取登錄微博時我們發(fā)出和接收的數(shù)據(jù)包。如下圖我抓取了在登錄時發(fā)出和接收的數(shù)據(jù)包Wireshark抓取結果1

    在搜索欄提供搜索條件”http”可得到所有http協(xié)議數(shù)據(jù)包,右側info顯示該數(shù)據(jù)包的縮略信息。圖中藍色一行是POST請求,并且info中有”login”,可以初步判斷這個請求是登錄時發(fā)出的第一個數(shù)據(jù)包,并且這個180.149.153.4應該是新浪微博手機版登錄認證的服務器IP地址,此時我們并沒有任何的cookie。

    在序號為30是數(shù)據(jù)包中有一個從該IP發(fā)出的HTTP數(shù)據(jù)包,里面有四個Set-Cookie字段,這些cookie將是我們爬蟲的基礎。

    Wireshark抓取結果2

    早在新浪微博服務器反爬機制升級之前,登錄是不需要驗證碼的,通過提交POST請求,可以拿到這些cookie,在項目源碼中的TestCookie.py中有示例代碼。

    ps.如果沒有wireshark或者不想這么麻煩的話,可以用瀏覽器的開發(fā)者工具,以chrome為例,在登錄前打開開發(fā)者工具,轉到Network,登錄,可以看到發(fā)出和接收的數(shù)據(jù),登錄完成后可以看到cookies,如下圖chrome開發(fā)者工具

    接下來訪問所需頁面,查看頁面url是否有某種規(guī)律。由于本項目目標之一是獲取某用戶的全部微博,所以直接訪問該用戶的微博頁面,以央視新聞 為例。

    央視新聞1

    圖為央視新聞微博第一頁,觀察該頁面的url可以發(fā)現(xiàn),新浪微博手機版的微博頁面url組成是 “weibo.cn/(displayID)?page=(pagenum)” 。這將成為我們爬蟲拼接url的依據(jù)。

    接下來查看網(wǎng)頁源碼,找到我們希望得到的信息的位置。打開瀏覽器開發(fā)者工具,直接定位某條微博,可以發(fā)現(xiàn)它的位置,如下所示。

    xpath

    觀察html代碼發(fā)現(xiàn),所有的微博都在<div>標簽里,并且這個標簽里有兩個屬性,其中class屬性為”c”,和一個唯一的id屬性值。得到這個信息有助于將所需信息提取出來。

    另外,還有一些需要特別注意的因素

    * 微博分為原創(chuàng)微博和轉發(fā)微博

    * 按照發(fā)布時間至當前時間的差距,在頁面上有”MM分鐘前”、”今天HH:MM”、”mm月dd日 HH:MM”、”yyyy-mm-dd HH:MM:SS”等多種顯示時間的方式* 手機版新浪微博一個頁面大約顯示10條微博,所以要注意對總共頁數(shù)進行記錄以上幾點都是細節(jié),在爬蟲和提取的時候需要仔細考慮。

    0x04. 編碼

    1.爬取用戶微博

    本項目開發(fā)語言是Python 2.7,項目中用了一些第三方庫,第三方庫可以用pip的方法添加。

    既然程序自動登錄的想法被驗證碼擋住了,想要訪問特定用戶微博頁面,只能使用者提供cookies了。

    首先用到的是Python的request模塊,它提供了帶cookies的url請求。

    import request

    print request.get(url, cookies=cookies).content使用這段代碼就可以打印帶cookies的url請求頁面結果。

    首先取得該用戶微博頁面數(shù),通過檢查網(wǎng)頁源碼,查找到表示頁數(shù)的元素,通過XPath等技術提取出頁數(shù)。

    頁數(shù)

    項目使用lxml模塊對html進行XPath提取。

    首先導入lxml模塊,在項目里只用到了etree,所以from lxml import etree

    然后利用下面的方法返回頁數(shù)

    def getpagenum(self):

    url = self.geturl(pagenum=1)

    html = requests.get(url, cookies=self.cook).content # Visit the first page to get the page number.

    selector = etree.HTML(html)

    pagenum = selector.xpath('//input[@name="mp"]/@value')[0]

    return int(pagenum)

    接下來就是不斷地拼接url->訪問url->下載網(wǎng)頁。

    需要注意的是,由于新浪反爬機制的存在,同一cookies訪問頁面過于“頻繁”的話會進入類似于“冷卻期”,即返回一個無用頁面,通過分析該無用頁面發(fā)現(xiàn),這個頁面在特定的地方會出現(xiàn)特定的信息,通過XPath技術來檢查這個特定地方是否出現(xiàn)了特定信息即可判斷該頁面是否對我們有用。

    def ispageneeded(html):

    selector = etree.HTML(html)

    try:

    title = selector.xpath('//title')[0]

    except:

    return False

    return title.text != '微博廣場' and title.text != '微博'

    如果出現(xiàn)了無用頁面,只需簡單地重新訪問即可,但是通過后期的實驗發(fā)現(xiàn),如果長期處于過頻訪問,返回的頁面將全是無用頁面,程序也將陷入死循環(huán)。為了避免程序陷入死循環(huán),博主設置了嘗試次數(shù)閾值trycount,超過這個閾值之后方法自動返回。

    下面代碼片展示了單線程爬蟲的方法。

    def startcrawling(self, startpage=1, trycount=20):

    attempt = 0

    try:

    os.mkdir(sys.path[0] + '/Weibo_raw/' + self.wanted)except Exception, e:

    print str(e)

    isdone = False

    while not isdone and attempt < trycount:

    try:

    pagenum = self.getpagenum()

    isdone = True

    except Exception, e:

    attempt += 1

    if attempt == trycount:

    return False

    i = startpage

    while i <= pagenum:

    attempt = 0

    isneeded = False

    html = ''

    while not isneeded and attempt < trycount:

    html = self.getpage(self.geturl(i))

    isneeded = self.ispageneeded(html)

    if not isneeded:

    attempt += 1

    if attempt == trycount:

    return False

    self.savehtml(sys.path[0] + '/Weibo_raw/' + self.wanted + '/' + str(i) + '.txt', html)print str(i) + '/' + str(pagenum - 1)

    i += 1

    return True

    考慮到程序的時間效率,在寫好單線程爬蟲之后,博主也寫了多線程爬蟲版本,基本思想是將微博頁數(shù)除以線程數(shù),如一個微博用戶有100頁微博,程序開10個線程,那么每個線程只負責10個頁面的爬取,其他基本思想跟單線程類似,只需仔細處理邊界值即可,在此不再贅述,感興趣的同學可以直接看代碼。另外,由于多線程的效率比較高,并發(fā)量特別大,所以服務器很容易就返回無效頁面,此時trycount的設置就顯得更重要了。博主在寫這篇微博的時候,用一個新的cookies,多線程爬取現(xiàn)場測試了一下爬取北京郵電大學的微博,3976條微博全部爬取成功并提取博文,用時僅15s,實際可能跟cookies的新舊程度和網(wǎng)絡環(huán)境有關,命令行設置如下,命令行意義在項目網(wǎng)址里有說明python main.py _T_WM=xxx; SUHB=xxx; SUB=xxx; gsid_CTandWM=xxx u bupt m 20 20爬取的工作以上基本介紹結束,接下來就是爬蟲的第二部分,解析了。由于項目中提供了多線程爬取方法,而多線程一般是無序的,但微博博文是依靠時間排序的,所以項目采用了一種折衷的辦法,將下載完成的頁面保存在本地文件系統(tǒng),每個頁面以其頁號為文件名,待爬取的工作結束后,再遍歷文件夾內所有文件并解析。

    通過前面的觀察,我們已經(jīng)了解到微博博文存在的標簽有什么特點了,利用XPath技術,將這個頁面里所有有這個特點的標簽全部提取出來已經(jīng)不是難事了。

    在這再次提醒,微博分為轉發(fā)微博和原創(chuàng)微博、時間表示方式。另外,由于我們的研究課題僅對微博文本感興趣,所以配圖不考慮。

    def startparsing(self, parsingtime=datetime.datetime.now()):

    basepath = sys.path[0] + '/Weibo_raw/' + self.uidfor filename in os.listdir(basepath):

    if filename.startswith('.'):

    continue

    path = basepath + '/' + filename

    f = open(path, 'r')

    html = f.read()

    selector = etree.HTML(html)

    weiboitems = selector.xpath('//div[@class="c"][@id]')for item in weiboitems:

    weibo = Weibo()

    weibo.id = item.xpath('./@id')[0]

    cmt = item.xpath('./div/span[@class="cmt"]')if len(cmt) != 0:

    weibo.isrepost = True

    weibo.content = cmt[0].text

    else:

    weibo.isrepost = False

    ctt = item.xpath('./div/span[@class="ctt"]')[0]

    if ctt.text is not None:

    weibo.content += ctt.text

    for a in ctt.xpath('./a'):

    if a.text is not None:

    weibo.content += a.text

    if a.tail is not None:

    weibo.content += a.tail

    if len(cmt) != 0:

    reason = cmt[1].text.split(u'\xa0')

    if len(reason) != 1:

    weibo.repostreason = reason[0]

    ct = item.xpath('./div/span[@class="ct"]')[0]

    time = ct.text.split(u'\xa0')[0]

    weibo.time = self.gettime(self, time, parsingtime)self.weibos.append(weibo.__dict__)

    f.close()

    方法傳遞的參數(shù)parsingtime的設置初衷是,開發(fā)前期爬取和解析可能不是同時進行的(并不是嚴格的“同時”),微博時間顯示是基于訪問時間的,比如爬取時間是10:00,這時爬取到一條微博顯示是5分鐘前發(fā)布的,但如果解析時間是10:30,那么解析時間將錯誤,所以應該講解析時間設置為10:00。到后期爬蟲基本開發(fā)完畢,爬取工作和解析工作開始時間差距降低,時間差將是爬取過程時長,基本可以忽略。

    解析結果保存在一個列表里,最后將這個列表以json格式保存到文件系統(tǒng)里,刪除過渡文件夾,完成。

    def save(self):

    f = open(sys.path[0] + '/Weibo_parsed/' + self.uid + '.txt', 'w')jsonstr = json.dumps(self.weibos, indent=4, ensure_ascii=False)f.write(jsonstr)

    f.close()

    2.爬取關鍵詞

    同樣的,收集必要的信息。在微博手機版搜索頁面敲入”python”,觀察url,研究其規(guī)律。雖然第一頁并無規(guī)律,但是第二頁我們發(fā)現(xiàn)了規(guī)律,而且這個規(guī)律可以返回應用于第一頁第一頁

    第二頁

    應用后第一頁

    觀察url可以發(fā)現(xiàn),對于關鍵詞的搜索,url中的變量只有keyword和page(事實上,hideSearchFrame對我們的搜索結果和爬蟲都沒有影響),所以在代碼中我們就可以對這兩個變量進行控制。

    另外,如果關鍵詞是中文,那么url就需要對中文字符進行轉換,如我們在搜索框敲入”開心”并搜索,發(fā)現(xiàn)url如下顯示搜索開心

    但復制出來卻為

    http://weibo.cn/search/mblog?hideSearchFrame=&keyword=%E5%BC%80%E5%BF%83&page=1幸好,python的urllib庫有qoute方法處理中文轉換的功能(如果是英文則不做轉換),所以在拼接url前使用這個方法處理一下參數(shù)。

    另外,考慮到關鍵詞搜索屬于數(shù)據(jù)收集階段使用的方法,所以在此只提供單線程下載網(wǎng)頁,如有多線程需要,大家可以按照多線程爬取用戶微博的方法自己改寫。最后,對下載下來的網(wǎng)頁進行提取并保存(我知道這樣的模塊設計有點奇怪,打算重(xin)構(qing)時(hao)時再改,就先這樣吧)。

    def keywordcrawling(self, keyword):

    realkeyword = urllib.quote(keyword) # Handle the keyword in Chinese.

    try:

    os.mkdir(sys.path[0] + '/keywords')

    except Exception, e:

    print str(e)

    weibos = []

    try:

    highpoints = re.compile(u'[\U00010000-\U0010ffff]') # Handle emoji, but it seems doesn't work.

    except re.error:

    highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')pagenum = 0

    isneeded = False

    while not isneeded:

    html = self.getpage('http://weibo.cn/search/mblog?keyword=%s&page=1' % realkeyword)isneeded = self.ispageneeded(html)

    if isneeded:

    selector = etree.HTML(html)

    try:

    pagenum = int(selector.xpath('//input[@name="mp"]/@value')[0])except:

    pagenum = 1

    for i in range(1, pagenum + 1):

    try:

    isneeded = False

    while not isneeded:

    html = self.getpage('http://weibo.cn/search/mblog?keyword=%s&page=%s' % (realkeyword, str(i)))isneeded = self.ispageneeded(html)

    selector = etree.HTML(html)

    weiboitems = selector.xpath('//div[@class="c"][@id]')for item in weiboitems:

    cmt = item.xpath('./div/span[@class="cmt"]')if (len(cmt)) == 0:

    ctt = item.xpath('./div/span[@class="ctt"]')[0]

    if ctt.text is not None:

    text = etree.tostring(ctt, method='text', encoding="unicode")tail = ctt.tail

    if text.endswith(tail):

    index = -len(tail)

    text = text[1:index]

    text = highpoints.sub(u'\u25FD', text) # Emoji handling, seems doesn't work.

    weibotext = text

    weibos.append(weibotext)

    print str(i) + '/' + str(pagenum)

    except Exception, e:

    print str(e)

    f = open(sys.path[0] + '/keywords/' + keyword + '.txt', 'w')try:

    f.write(json.dumps(weibos,indent=4,ensure_ascii=False))except Exception,ex:

    print str(ex)

    finally:

    f.close()

    博主之前從未寫過任何爬蟲程序,為了獲取新浪微博博文,博主先后寫了3個不同的爬蟲程序,有Python,有Java,爬蟲不能用了是很正常的,不要氣餒,爬蟲程序和反爬機制一直都在不斷博弈中,道高一尺魔高一丈。

    另. 轉載請告知博主,如果覺得博主帥的話就可以不用告知了

    四、網(wǎng)絡爬蟲抓取數(shù)據(jù) 有什么好的應用

    一般抓數(shù)據(jù)的話可以學習Python,但是這個需要代碼的知識。

    如果是沒有代碼知識的小白可以試試用成熟的采集器。

    目前市面比較成熟的有八爪魚,后羿等等,但是我個人習慣八爪魚的界面,用起來也好上手,主要是他家的教程容易看懂。可以試試。

    以上就是關于爬蟲爬取高頻關鍵詞相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。


    推薦閱讀:

    百度關鍵詞排名爬蟲(關鍵詞爬蟲工具)

    爬蟲人民日報關鍵詞(人民日報 關鍵詞)

    怎么通過一段話搜索來源爬蟲(怎么通過一段話搜索來源爬蟲的內容)

    團隊口號大全(團隊口號大全8個字)

    加速器外網(wǎng)YouTube(手機加速器外網(wǎng))