上一篇說過的
用於獲取某個網址源碼的方式javascript
#首先導入庫 import urllib.request #使用urllib將網頁源碼抓取下來 response = urllib.request.urlopen("https://github.com/lihn1987/CoinCollector").read().decode('utf-8')
此方式很是簡單好用,可是若是常用問題也很明顯。
就是。。。常常會拋出異常,因此。。。。。。。php
因而寫了一個函數css
import urllib.request import time def func(url): for i in range(10): try: #設置5s超時 response = urllib.request.urlopen(url=url, timeout=5).read().decode('utf-8') #數據抓取成功則返回網頁內容 return response except: #發生異常則延時5s再試 time.sleep(5) pass return "" print(func("https://github.com/lihn1987/CoinCollector"))
這是我用的方式,意思是若是抓取失敗則延時5s繼續抓,若是連續失敗10次則返回空字符串。
雖然不聰明,可是還蠻實用的。
抓取的問題解決了,另外就是分析網頁的問題了。html
對於網頁,以前前端很經常使用的一個工具叫作jquery,雖然如今被各類嫌棄,可是在爬蟲裏面分析網頁仍是至關好用的。
這個工具就是pyquery,
先說說pyquery是如何安裝的前端
pip3 install pyquery
簡單,一行搞定
有了pyquery因而關於上一篇文章中的問題有了新的,更加通用的解法vue
import urllib.request from pyquery import PyQuery as pq import time def open_url(url): for i in range(10): try: #設置5s超時 response = urllib.request.urlopen(url=url, timeout=5).read().decode('utf-8') #數據抓取成功則返回網頁內容 return response except: #發生異常則延時5s再試 print("retry") time.sleep(5) pass return "" response = open_url("https://github.com/lihn1987/CoinCollector") doc = pq(response) print(doc(".text-gray-dark").text())
這樣就直接拿到數據了,另外.text-gray-dark是什麼鬼?
這實際上是一個基本兼容jquery選擇器的一個語法簡單的說
.xxx表示class選擇器java
xxx表示類型選擇器
具體的咱們能夠參照這裏
https://www.runoob.com/jquery/jquery-ref-selectors.htmlpython
這樣就能夠輕鬆的分析網頁的內容了!!!!可是問題又來了~jquery
來試試我作的幣小站能爬信息麼?
網頁是這樣的
而抓出來的源碼是這樣的git
<!DOCTYPE html> <html> <head> <meta charset=utf-8> <meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <title>幣小站</title> <meta name=keywords content="區塊鏈 新聞 行情 彙總 twitter"> <meta name=description content=讓區塊鏈迴歸技術的本質,一個愈來愈客觀的網站。一個用於彙總全部幣圈相關新聞和交易所全部價格的綜合性網站。> <meta name=author content=骨刀> <link href=/static/css/app.478bec1cafbfb47360d93fa5fdfae513.css rel=stylesheet> </head><body style=margin:0;><div id=app></div> <script type=text/javascript src=/static/js/manifest.2ae2e69a05c33dfc65f8.js></script> <script type=text/javascript src=/static/js/vendor.819f64e38c7bf9a15e47.js></script> <script type=text/javascript src=/static/js/app.e578d90495f8b0491383.js></script> </body> <script>var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?da027fc509c97b7eed276be86e37e1ee"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-153688786-1"></script><script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-153688786-1');</script></html>
這TMD抓出來的東東,明明什麼都沒有啊!!!!!!!!!
沒錯,這個網站前端是使用vue框架的,因此他的html頁面中幾乎什麼內容都沒有,所有是加載js之後,經過渲染才展現出的界面。因此直接抓取網頁幾乎拿不到任何信息,那麼怎麼辦呢?
有辦法!
打開chrome瀏覽器,按下F12鍵,在調試選項中選擇NetWork,而後輸入要採集的站點的網址www.bxiaozhan.com
如圖所示
發現了麼這些信心是網站打開後從後臺加載的,因而若是咱們要獲取新聞列表和內容的話,直接經過這個接口就能夠了,回來的就是json的值,連處理都不須要!!!!
相似於瀏覽器裏面直接輸入http://www.bxiaozhan.com/back...
獲得的結果以下所示
{"count":"3436","list":[{"time_utc":"1576319292","title":"Filecoin測試網上線,官方團隊回答了礦工這22個問題","desc":"12月12日,Filecoin官方團隊跟礦工進行了2個小時的測試網互動問答環節。","author":"IPFS星際大陸","source_media":"8比特","source_addr":"https:\/\/www.8btc.com\/article\/533100"},{"time_utc":"1576317734","title":"解密區塊鏈成爲將來技術核心的五個要因","desc":"本文從區塊鏈的無中間人、多種實現潛力、市場價值快速增加、使用電子治理以及商業巨頭對區塊鏈信任有加五個角度出發,闡述了爲什麼區塊鏈能成爲將來的技術核心。","author":"頭等倉區塊鏈研究院","source_media":"金色財金","source_addr":"https:\/\/www.jinse.com\/blockchain\/549564.html"},{"time_utc":"1576317668","title":"北京互金協會易歡歡:國家數字貨幣纔是最大的區塊鏈殺手級應用","desc":" 據和訊網消息,12月14日,在工信部電子五所指導、互鏈脈搏主辦的「2019 In-Chain全球區塊鏈峯會」上,北京互聯網金融行業協會副會長易歡歡就區塊鏈發展應用狀況發表主題演講。他表示,國家數字貨幣纔是最大的區塊鏈殺手級應用,且國家數字貨幣背後是強大的貿易和服務力量在支撐,有着較爲龐大的C端市場。而從技術發展角度看,區塊鏈將成爲下一輪技術創新的關鍵突破口,是萬物互聯、5G、人工智能、量子計算等衆多高新技術的底層架構。區塊鏈應用的重點領域爲數字金融、物聯網、智能製造、供應鏈管理、數字資產交易。<\/p>","author":"陀螺快訊","source_media":"陀螺財經","source_addr":"https:\/\/www.tuoluocaijing.cn\/kuaixun\/detail-98330.html"},{"time_utc":"1576316330","title":"火幣大學校長於佳寧:把握5G最好的切入點就是區塊鏈","desc":" 12月14日,在互鏈脈搏主辦的「IN-Chain全球區塊鏈峯會」上,火幣大學校長於佳寧發表主題爲《5G時代的「區塊鏈+產業協同」》的主題演講。他表示,把握5G最好的切入點就是區塊鏈,在5G時代要有區塊鏈思惟。區塊鏈自己是重要的新物種,不能簡單用舊物種類比的方式看待。其威力就在於,它將網絡效應、金融槓桿兩個最重要的商業工具融合在了一塊兒。<\/p>\n 於佳寧最後總結稱,區塊鏈思惟將是破解一切的鑰匙,產業升級的關鍵點。<\/p>","author":"陀螺快訊","source_media":"陀螺財經","source_addr":"https:\/\/www.tuoluocaijing.cn\/kuaixun\/detail-98329.html"},{"time_utc":"1576315805","title":"傳統金融或將迎來收益最慘淡的十年:是否能催生加密貨幣的春天?","desc":"許多華爾街資深人士都認爲, 將來十年,股票和債券的回報速度將減慢。","author":"頭等倉","source_media":"8比特","source_addr":"https:\/\/www.8btc.com\/article\/533116"},{"time_utc":"1576315586","title":"科普 | 加密衍生品的流動性機制","desc":"在本文中,咱們將介紹不一樣的流動性和交易機制。","author":"以太坊愛好者","source_media":"8比特","source_addr":"https:\/\/www.8btc.com\/article\/533174"},{"time_utc":"1576314887","title":"瑞典央行表示將啓動數字貨幣試點項目","desc":"瑞典中央銀行週五表示將與諮詢公司埃森哲(Accenture)簽署協議,爲其數字貨幣電子克朗(e-krona)建立一個試點平臺。","author":"金色財經 meio","source_media":"金色財金","source_addr":"https:\/\/www.jinse.com\/news\/blockchain\/549589.html"},{"time_utc":"1576314690","title":"中國移動10086:提醒用戶警戒以區塊鏈名義的非法集資","desc":"據區塊律動消息,12 月 13 日,中國移動10086推送短信提醒,提醒用戶警戒以區塊鏈名義的非法集資。 中國移動短信顯示:省處非辦提示您,科學理性看待區塊鏈技術創新和應用,警戒不法分子炒做區塊鏈概念,以虛擬貨幣、區塊鏈商城、區塊鏈遊戲等名義非法集資,謹防受騙。","author":"陀螺快訊","source_media":"陀螺財經","source_addr":"https:\/\/www.tuoluocaijing.cn\/kuaixun\/detail-98328.html"},{"time_utc":"1576313123","title":"觀察 | 5 張圖描繪 2019 年 Web3 堆棧全景","desc":"時隔一年有餘,投資機構 Multicoin 更新了 Web3 堆棧全景,用 5 張圖描繪 2019 年 Web3 生態現狀。","author":"區塊鏈資訊","source_media":"8比特","source_addr":"https:\/\/www.8btc.com\/article\/533086"},{"time_utc":"1576312962","title":"中國人民大學副校長吳曉求:區塊鏈的核心價值是數字經濟的確權","desc":"區塊鏈最重要的是數字經濟的確權。數字經濟時代許多產品的權屬須要確認,確認了產權歸屬,市場經濟才能健康穩定發展。","author":"雷鋒網","source_media":"金色財金","source_addr":"https:\/\/www.jinse.com\/news\/blockchain\/549698.html"}]}
這樣依照前面的方法,若是想獲取新聞列表的話,直接訪問獲取
http://www.bxiaozhan.com/back...
這個網址的就能夠,而不須要在從頁面上的html進行分析了。
至此!
爬蟲的技術又近了一步!
附:
本文所說的幣小站網址爲:http://www.bxiaozhan.com
該網站全部代碼位於:https://github.com/lihn1987/CoinCollector