⑴ 有哪些網站用爬蟲爬取能得到很有價值的數據
一般有一下幾種
一些常用的方法
IP代理
對於IP代理,各個語言的Native
Request
API都提供的IP代理響應的API,
需要解決的主要就是IP源的問題了.
網路上有廉價的代理IP(1元4000個左右),
我做過簡單的測試,
100個IP中,
平均可用的在40-60左右,
訪問延遲均在200以上.
網路有高質量的代理IP出售,
前提是你有渠道.
因為使用IP代理後,
延遲加大,
失敗率提高,
所以可以將爬蟲框架中將請求設計為非同步,
將請求任務加入請求隊列(RabbitMQ,Kafka,Redis),
調用成功後再進行回調處理,
失敗則重新加入隊列.
每次請求都從IP池中取IP,
如果請求失敗則從IP池中刪除該失效的IP.
Cookies
有一些網站是基於cookies做反爬蟲,
這個基本上就是如
@朱添一
所說的,
維護一套Cookies池
注意研究下目標網站的cookies過期事件,
可以模擬瀏覽器,
定時生成cookies
限速訪問
像開多線程,循環無休眠的的暴力爬取數據,
那真是分分鍾被封IP的事,
限速訪問實現起來也挺簡單(用任務隊列實現),
效率問題也不用擔心,
一般結合IP代理已經可以很快地實現爬去目標內容.
一些坑
大批量爬取目標網站的內容後,
難免碰到紅線觸發對方的反爬蟲機制.
所以適當的告警提示爬蟲失效是很有必有的.
一般被反爬蟲後,
請求返回的HttpCode為403的失敗頁面,
有些網站還會返回輸入驗證碼(如豆瓣),
所以檢測到403調用失敗,
就發送報警,
可以結合一些監控框架,
如Metrics等,
設置短時間內,
告警到達一定閥值後,
給你發郵件,簡訊等.
當然,
單純的檢測403錯誤並不能解決所有情況.
有一些網站比較奇葩,
反爬蟲後返回的頁面仍然是200的(如去哪兒),
這時候往往爬蟲任務會進入解析階段,
解析失敗是必然的.
應對這些辦法,
也只能在解析失敗的時候,
發送報警,
當告警短時間到達一定閥值,
再觸發通知事件.
當然這個解決部分並不完美,
因為有時候,
因為網站結構改變,
而導致解析失敗,
同樣回觸發告警.
而你並不能很簡單地區分,
告警是由於哪個原因引起的.
⑵ 有哪些網站用爬蟲爬取能得到很有價值的數據
一般有一下幾種
一些常用的方法
IP代理
對於IP代理,各個語言的Native Request API都提供的IP代理響應的API, 需要解決的主要就是IP源的問題了.
網路上有廉價的代理IP(1元4000個左右), 我做過簡單的測試, 100個IP中, 平均可用的在40-60左右, 訪問延遲均在200以上.
網路有高質量的代理IP出售, 前提是你有渠道.
因為使用IP代理後, 延遲加大, 失敗率提高, 所以可以將爬蟲框架中將請求設計為非同步, 將請求任務加入請求隊列(RabbitMQ,Kafka,Redis), 調用成功後再進行回調處理, 失敗則重新加入隊列. 每次請求都從IP池中取IP, 如果請求失敗則從IP池中刪除該失效的IP.
Cookies
有一些網站是基於cookies做反爬蟲, 這個基本上就是如 @朱添一 所說的, 維護一套Cookies池
注意研究下目標網站的cookies過期事件, 可以模擬瀏覽器, 定時生成cookies
限速訪問
像開多線程,循環無休眠的的暴力爬取數據, 那真是分分鍾被封IP的事, 限速訪問實現起來也挺簡單(用任務隊列實現), 效率問題也不用擔心, 一般結合IP代理已經可以很快地實現爬去目標內容.
一些坑
大批量爬取目標網站的內容後, 難免碰到紅線觸發對方的反爬蟲機制. 所以適當的告警提示爬蟲失效是很有必有的.
一般被反爬蟲後, 請求返回的HttpCode為403的失敗頁面, 有些網站還會返回輸入驗證碼(如豆瓣), 所以檢測到403調用失敗, 就發送報警, 可以結合一些監控框架, 如Metrics等, 設置短時間內, 告警到達一定閥值後, 給你發郵件,簡訊等.
當然, 單純的檢測403錯誤並不能解決所有情況. 有一些網站比較奇葩, 反爬蟲後返回的頁面仍然是200的(如去哪兒), 這時候往往爬蟲任務會進入解析階段, 解析失敗是必然的. 應對這些辦法, 也只能在解析失敗的時候, 發送報警, 當告警短時間到達一定閥值, 再觸發通知事件.
當然這個解決部分並不完美, 因為有時候, 因為網站結構改變, 而導致解析失敗, 同樣回觸發告警. 而你並不能很簡單地區分, 告警是由於哪個原因引起的.
⑶ 如何爬取全網1200本Python書
前面寫了一篇文章關於爬取市面上所有的Python書思路,這也算是我們數據分析系列講座裡面的一個小的實戰項目。上次代碼沒有寫完,正好周末有時間把代碼全部完成並且存入了資料庫中,今天就給大家一步步分析一下是我是如何爬取數據,清洗數據和繞過反爬蟲的一些策略和點滴記錄。
1
目標網站分析-主頁面爬取
1).市面上所有的Python書,都在京東,淘寶和豆瓣上,於是我選擇了豆瓣來爬取
2).分析網站的結構,其實還是比較簡單的,首先有一個主的頁面,裡面有所有python的鏈接,一共1388本(其中有100多本其實是重復的),網頁底部分頁顯示一共93頁
3).這個頁面是靜態頁面,url頁比較有規律,所以很容易構造出所有的url的地址
4).爬蟲每個分頁裡面的所有的Python書和對應的url,比如第一頁裡面有"笨辦法這本書",我們只需要提取書名和對應的url
2
單個頁面分析爬取
1).上面我們已經提取了93個頁面的所有的Python書和對應的url,一共是93*15大概1300多本書,首先先去重,然後我們可以把它存到內存裡面用一個字典保存,或者存到一個csv文件中去(有同學可能奇怪為啥要存到文件裡面呢,用字典存取不是方便嗎,先不說最後揭曉)
2).我們接著分析每本書頁面的特徵:
上一片文章說過我們需要分析:
作者/出版社/譯者/出版年/頁數/定價/ISBN/評分/評價人數
看一下網站的源碼,發現主要的信息在div id="info" 和div class="rating_self clearfix"
3).這一部分的數據清洗是比較麻煩的,因為不是每一本書都是有點評和評分系統的,而且不是每一本書都有作者,頁面,價格的,所以提取的時候一定要做好異常處理,比如有的頁面長的這樣:
原始數據採集的過程中有很多不一致的數據:
書的日期表示格式,各種各樣都有:
有的書的日期是:'September 2007','October 22, 2007','2017-9','2017-8-25'
有的書的價格是貨幣單位不統一,有美金,日元,歐元和人民幣
比如:CNY 49.00,135,19 €,JPY 4320, $ 176.00
3
多線程爬取
1).有的同學後台問我,你是用scrapy框架還是自己動手寫的,我這個項目是自己動手寫的,其實scrapy是一個非常棒的框架,如果爬取幾十萬的數據,我一定會用這個超級武器.
2).我用的是多線程爬取,把所有的url都扔到一個隊列裡面,然後設置幾個線程去隊列裡面不斷的爬取,然後循環往復,直到隊列里的url全部處理完畢
3).數據存儲的時候,有兩種思路:
一種是直接把爬取完的數據存到SQL資料庫裡面,然後每次新的url來了之後,直接查詢資料庫裡面有沒有,有的話,就跳過,沒有就爬取處理
另一種是存入CSV文件,因為是多線程存取,所以一定要加保護,不然幾個線程同時寫一個文件的會有問題的,寫成CSV文件也能轉換成資料庫,而且保存成CSV文件還有一個好處,可以轉成pandas非常方便的處理分析.
4
反爬蟲策略
1).一般大型的網站都有反爬蟲策略,雖然我們這次爬的數量只有1000本書,但是一樣會碰到反爬蟲問題
2).關於反爬蟲策略,繞過反爬蟲有很多種方法。有的時候加時延(特別是多線程處理的時候),有的時候用cookie,有的會代理,特別是大規模的爬取肯定是要用代理池的,我這里用的是cookie加時延,比較土的方法.
3).斷點續傳,雖然我的數據量不是很大,千條規模,但是建議要加斷點續傳功能,因為你不知道在爬的時候會出現什麼問題,雖然你可以遞歸爬取,但是如果你爬了800多條,程序掛了,你的東西還沒用存下來,下次爬取又要重頭開始爬,會吐血的(聰明的同學肯定猜到,我上面第二步留的伏筆,就是這樣原因)
5
代碼概述篇
1).整個的代碼架構我還沒有完全優化,目前是6個py文件,後面我會進一步優化和封裝的
spider_main:主要是爬取93個分頁的所有書的鏈接和書面,並且多線程處理
book_html_parser:主要是爬取每一本書的信息
url_manager:主要是管理所有的url鏈接
db_manager:主要是資料庫的存取和查詢
util:是一個存放一些全局的變數
verify:是我內部測試代碼的一個小程序
2).主要的爬取結果的存放
all_books_link.csv:主要存放1200多本書的url和書名
python_books.csv:主要存放具體每一本書的信息
3).用到的庫
爬蟲部分:用了requests,beautifulSoup
數據清洗:用了大量的正則表達式,collection模塊,對書的出版日期用了datetime和calendar模塊
多線程:用了threading模塊和queue
結論:
好,今天的全網分析Python書,爬蟲篇,就講道這里,基本上我們整個這個項目的技術點都講了一遍,爬蟲還是很有意思的,但是要成為一個爬蟲高手還有很多地方要學習,想把爬蟲寫的爬取速度快,又穩健,還能繞過反爬蟲系統,並不是一件容易的事情. 有興趣的小夥伴,也可以自己動手寫一下哦。源碼等後面的數據分析篇講完後,我會放github上,若有什麼問題,也歡迎留言討論一下.
⑷ python 新浪微博爬蟲,求助
0x00. 起因
因為參加學校大學生創新競賽,研究有關微博博文表達的情緒,需要大量微博博文,而網上無論是國內的某度、csdn,還是國外谷歌、gayhub、codeproject等都找不到想要的程序,沒辦法只能自己寫一個程序了。
ps.在爬盟找到類似的程序,但是是windows下的,並且閉源,而且最終爬取保存的文件用notepad++打開有很多奇怪的問題,所以放棄了。
0x01. 基礎知識
本程序由Python寫成,所以基本的python知識是必須的。另外,如果你有一定的計算機網路基礎,在前期准備時會有少走很多彎路。
對於爬蟲,需要明確幾點:
1. 對爬取對象分類,可以分為以下幾種:第一種是不需要登錄的,比如博主以前練手時爬的中國天氣網,這種網頁爬取難度較低,建議爬蟲新手爬這類網頁;第二種是需要登錄的,如豆瓣、新浪微博,這些網頁爬取難度較高;第三種獨立於前兩種,你想要的信息一般是動態刷新的,如AJAX或內嵌資源,這種爬蟲難度最大,博主也沒研究過,在此不細舉(據同學說淘寶的商品評論就屬於這類)。
2. 如果同一個數據源有多種形式(比如電腦版、手機版、客戶端等),優先選取較為「純凈的」展現。比如新浪微博,有網頁版,也有手機版,而且手機版可以用電腦瀏覽器訪問,這時我優先選手機版新浪微博。
3. 爬蟲一般是將網頁下載到本地,再通過某些方式提取出感興趣的信息。也就是說,爬取網頁只完成了一半,你還要將你感興趣的信息從下載下來的html文件中提取出來。這時就需要一些xml的知識了,在這個項目中,博主用的是XPath提取信息,另外可以使用XQuery等等其他技術,詳情請訪問w3cschool。
4. 爬蟲應該盡量模仿人類,現在網站反爬機制已經比較發達,從驗證碼到禁IP,爬蟲技術和反爬技術可謂不斷博弈。
0x02. 開始
決定了爬蟲的目標之後,首先應該訪問目標網頁,明確目標網頁屬於上述幾種爬蟲的哪種,另外,記錄為了得到感興趣的信息你需要進行的步驟,如是否需要登錄,如果需要登錄,是否需要驗證碼;你要進行哪些操作才能獲得希望得到的信息,是否需要提交某些表單;你希望得到的信息所在頁面的url有什麼規律等等。
以下博文以博主項目為例,該項目爬取特定新浪微博用戶從注冊至今的所有微博博文和根據關鍵詞爬取100頁微博博文(大約1000條)。
0x03. 收集必要信息
首先訪問目標網頁,發現需要登錄,進入登錄頁面如下新浪微博手機版登錄頁面
注意url後半段有很多形如」%xx」的轉義字元,本文後面將會講到。
從這個頁面可以看到,登錄新浪微博手機版需要填寫賬號、密碼和驗證碼。
這個驗證碼是近期(本文創作於2016.3.11)才需要提供的,如果不需要提供驗證碼的話,將有兩種方法進行登錄。
第一種是填寫賬號密碼之後執行js模擬點擊「登錄」按鈕,博主之前寫過一個Java爬蟲就是利用這個方法,但是現在找不到工程了,在此不再贅述。
第二種需要一定HTTP基礎,提交包含所需信息的HTTP POST請求。我們需要Wireshark 工具來抓取登錄微博時我們發出和接收的數據包。如下圖我抓取了在登錄時發出和接收的數據包Wireshark抓取結果1
在搜索欄提供搜索條件」http」可得到所有http協議數據包,右側info顯示該數據包的縮略信息。圖中藍色一行是POST請求,並且info中有」login」,可以初步判斷這個請求是登錄時發出的第一個數據包,並且這個180.149.153.4應該是新浪微博手機版登錄認證的伺服器IP地址,此時我們並沒有任何的cookie。
在序號為30是數據包中有一個從該IP發出的HTTP數據包,裡面有四個Set-Cookie欄位,這些cookie將是我們爬蟲的基礎。
Wireshark抓取結果2
早在新浪微博伺服器反爬機制升級之前,登錄是不需要驗證碼的,通過提交POST請求,可以拿到這些cookie,在項目源碼中的TestCookie.py中有示例代碼。
ps.如果沒有wireshark或者不想這么麻煩的話,可以用瀏覽器的開發者工具,以chrome為例,在登錄前打開開發者工具,轉到Network,登錄,可以看到發出和接收的數據,登錄完成後可以看到cookies,如下圖chrome開發者工具
接下來訪問所需頁面,查看頁面url是否有某種規律。由於本項目目標之一是獲取某用戶的全部微博,所以直接訪問該用戶的微博頁面,以央視新聞 為例。
央視新聞1
圖為央視新聞微博第一頁,觀察該頁面的url可以發現,新浪微博手機版的微博頁面url組成是 「weibo.cn/(displayID)?page=(pagenum)」 。這將成為我們爬蟲拼接url的依據。
接下來查看網頁源碼,找到我們希望得到的信息的位置。打開瀏覽器開發者工具,直接定位某條微博,可以發現它的位置,如下所示。
xpath
觀察html代碼發現,所有的微博都在<div>標簽里,並且這個標簽里有兩個屬性,其中class屬性為」c」,和一個唯一的id屬性值。得到這個信息有助於將所需信息提取出來。
另外,還有一些需要特別注意的因素
* 微博分為原創微博和轉發微博
* 按照發布時間至當前時間的差距,在頁面上有」MM分鍾前」、」今天HH:MM」、」mm月dd日 HH:MM」、」yyyy-mm-dd HH:MM:SS」等多種顯示時間的方式* 手機版新浪微博一個頁面大約顯示10條微博,所以要注意對總共頁數進行記錄以上幾點都是細節,在爬蟲和提取的時候需要仔細考慮。
0x04. 編碼
1.爬取用戶微博
本項目開發語言是Python 2.7,項目中用了一些第三方庫,第三方庫可以用pip的方法添加。
既然程序自動登錄的想法被驗證碼擋住了,想要訪問特定用戶微博頁面,只能使用者提供cookies了。
首先用到的是Python的request模塊,它提供了帶cookies的url請求。
import request
print request.get(url, cookies=cookies).content使用這段代碼就可以列印帶cookies的url請求頁面結果。
首先取得該用戶微博頁面數,通過檢查網頁源碼,查找到表示頁數的元素,通過XPath等技術提取出頁數。
頁數
項目使用lxml模塊對html進行XPath提取。
首先導入lxml模塊,在項目里只用到了etree,所以from lxml import etree
然後利用下面的方法返回頁數
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->下載網頁。
需要注意的是,由於新浪反爬機制的存在,同一cookies訪問頁面過於「頻繁」的話會進入類似於「冷卻期」,即返回一個無用頁面,通過分析該無用頁面發現,這個頁面在特定的地方會出現特定的信息,通過XPath技術來檢查這個特定地方是否出現了特定信息即可判斷該頁面是否對我們有用。
def ispageneeded(html):
selector = etree.HTML(html)
try:
title = selector.xpath('//title')[0]
except:
return False
return title.text != '微博廣場' and title.text != '微博'
如果出現了無用頁面,只需簡單地重新訪問即可,但是通過後期的實驗發現,如果長期處於過頻訪問,返回的頁面將全是無用頁面,程序也將陷入死循環。為了避免程序陷入死循環,博主設置了嘗試次數閾值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
考慮到程序的時間效率,在寫好單線程爬蟲之後,博主也寫了多線程爬蟲版本,基本思想是將微博頁數除以線程數,如一個微博用戶有100頁微博,程序開10個線程,那麼每個線程只負責10個頁面的爬取,其他基本思想跟單線程類似,只需仔細處理邊界值即可,在此不再贅述,感興趣的同學可以直接看代碼。另外,由於多線程的效率比較高,並發量特別大,所以伺服器很容易就返回無效頁面,此時trycount的設置就顯得更重要了。博主在寫這篇微博的時候,用一個新的cookies,多線程爬取現場測試了一下爬取北京郵電大學的微博,3976條微博全部爬取成功並提取博文,用時僅15s,實際可能跟cookies的新舊程度和網路環境有關,命令行設置如下,命令行意義在項目網址里有說明python main.py _T_WM=xxx; SUHB=xxx; SUB=xxx; gsid_CTandWM=xxx u bupt m 20 20爬取的工作以上基本介紹結束,接下來就是爬蟲的第二部分,解析了。由於項目中提供了多線程爬取方法,而多線程一般是無序的,但微博博文是依靠時間排序的,所以項目採用了一種折衷的辦法,將下載完成的頁面保存在本地文件系統,每個頁面以其頁號為文件名,待爬取的工作結束後,再遍歷文件夾內所有文件並解析。
通過前面的觀察,我們已經了解到微博博文存在的標簽有什麼特點了,利用XPath技術,將這個頁面里所有有這個特點的標簽全部提取出來已經不是難事了。
在這再次提醒,微博分為轉發微博和原創微博、時間表示方式。另外,由於我們的研究課題僅對微博文本感興趣,所以配圖不考慮。
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()
方法傳遞的參數parsingtime的設置初衷是,開發前期爬取和解析可能不是同時進行的(並不是嚴格的「同時」),微博時間顯示是基於訪問時間的,比如爬取時間是10:00,這時爬取到一條微博顯示是5分鍾前發布的,但如果解析時間是10:30,那麼解析時間將錯誤,所以應該講解析時間設置為10:00。到後期爬蟲基本開發完畢,爬取工作和解析工作開始時間差距降低,時間差將是爬取過程時長,基本可以忽略。
解析結果保存在一個列表裡,最後將這個列表以json格式保存到文件系統里,刪除過渡文件夾,完成。
def save(self):
f = open(sys.path[0] + '/Weibo_parsed/' + self.uid + '.txt', 'w')jsonstr = json.mps(self.weibos, indent=4, ensure_ascii=False)f.write(jsonstr)
f.close()
2.爬取關鍵詞
同樣的,收集必要的信息。在微博手機版搜索頁面敲入」python」,觀察url,研究其規律。雖然第一頁並無規律,但是第二頁我們發現了規律,而且這個規律可以返回應用於第一頁第一頁
第二頁
應用後第一頁
觀察url可以發現,對於關鍵詞的搜索,url中的變數只有keyword和page(事實上,hideSearchFrame對我們的搜索結果和爬蟲都沒有影響),所以在代碼中我們就可以對這兩個變數進行控制。
另外,如果關鍵詞是中文,那麼url就需要對中文字元進行轉換,如我們在搜索框敲入」開心」並搜索,發現url如下顯示搜索開心
但復制出來卻為
http://weibo.cn/search/mblog?hideSearchFrame=&keyword=%E5%BC%80%E5%BF%83&page=1幸好,python的urllib庫有qoute方法處理中文轉換的功能(如果是英文則不做轉換),所以在拼接url前使用這個方法處理一下參數。
另外,考慮到關鍵詞搜索屬於數據收集階段使用的方法,所以在此只提供單線程下載網頁,如有多線程需要,大家可以按照多線程爬取用戶微博的方法自己改寫。最後,對下載下來的網頁進行提取並保存(我知道這樣的模塊設計有點奇怪,打算重(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.mps(weibos,indent=4,ensure_ascii=False))except Exception,ex:
print str(ex)
finally:
f.close()
博主之前從未寫過任何爬蟲程序,為了獲取新浪微博博文,博主先後寫了3個不同的爬蟲程序,有Python,有Java,爬蟲不能用了是很正常的,不要氣餒,爬蟲程序和反爬機制一直都在不斷博弈中,道高一尺魔高一丈。
另. 轉載請告知博主,如果覺得博主帥的話就可以不用告知了
⑸ 有哪些可以查找數據的網站
網站如下:
1、中國統計局
這個網站可謂是要啥有啥,如農業,生產,經濟,教育等等,可以獲得具有權威的數據,而且覆蓋面很廣。可以找到很多宏觀層面的信息,GDP、人口、就業、收支等。
2、經合組織開放的數據網
包含參與經濟合作與發展組織的36個國家的數據,英文界面。數據也包含農業、經濟、教育、能源等等,也具有多個版本可以下載使用(但沒有Excel),分類也相對有心和精細。
簡介:
數據就是數值,也就是我們通過觀察、實驗或計算得出的結果。數據有很多種,最簡單的就是數字。數據也可以是文字、圖像、聲音等。數據可以用於科學研究、設計、查證、數學等。指進行各種統計、計算、科學研究或技術設計等所依託的數值。
⑹ 有哪些網站用爬蟲爬取能得到很有價值的數據
看您自己需要什麼信息啊,像某寶上的寶貝信息,58等門戶網站上的各分類信息,都是很有價值的;某寶上的楚江數據就是做網站APP數據採集,爬蟲定製,各類網站都能爬到有價值數據。
⑺ 獲取統計數據可以通過什麼網站在數據查詢處輸入檢索內容查詢統計數據
可以通過國家統計局官方網站進行統計數據的查詢以及下載。登錄國家統計局官網,搜索自己想要的數據,點擊下載即可。