1. 程式人生 > >Python網路爬蟲與資訊提取Day2

Python網路爬蟲與資訊提取Day2

Python網路爬蟲與資訊提取
一、導學
掌握定向網路資料爬取和網頁解析的基本能力
1、Requests庫:自動爬取HTML頁面,自動向網路提交請求
2、robots.txt:網路爬蟲排除標準
3、Beautiful Soup庫:解析HTML頁面
4、Projects:實戰專案A/B
5、Re庫:正則表示式詳解,提取頁面關鍵資訊
6、Scarpy*:網路爬蟲原理介紹,專業爬蟲框架介紹
二、Python開發工具
文字工具類IDE:IDLE,Sublime Text
整合工具類IDE:PyCharm,Anaconda & Spyder,Wings,Eclipse
三、Requests庫入門
1、安裝Requests庫,開啟cmder,輸入命令:pip install requests
2、測試一下是否安裝成功
開啟Python自帶的IDLE,輸入一下命令
import requests#匯入Requests庫
r = requests.get("http://www.baidu.com")#連線百度官網
r.status_code#測試是否安裝庫成功,如果安裝成功則狀態碼會顯示200
r.encoding = "utf-8"#打印出百度官網的網頁
r.text
3、Requests庫的常用方法:request,get,head,post,put,patch,delete
(1)get方法
r = requests.get(url,params=None,**kwargs)
url:擬獲取頁面的url連線
params:url中的額外引數,字典或位元組流格式,可選
**kwargs:12個控制訪問的引數
另外還有其他常用方法:head(),post(),put(),patch(),delete(),options()
1)Response物件的屬性
r.status_code:Http請求的返回狀態,200表示連線成功,404表示失敗
r.text:Http響應內容的字串形式,即url對應的頁面內容
r.encoding:從HTTP header 中猜測的響應內容編碼方式
r.apparent_encoding:從內容中分析出的響應內容編碼方式(備選編碼方式)
r.content:Http響應內容的二進位制形式
2)Requests庫的異常
requests.ConnectionError:網路連線錯誤異常,如DNS查詢失敗、拒絕連線等
requests.HTTPErrot:HTTP錯誤異常
requests.URLRequired:URL缺失異常
requests.TooManyRedirectsL:超過最大重定向次數,產生重定向異常
requests.ConnectTimeout:連線遠端伺服器超時異常
requests.Timeout:請求URL超時,產生超時異常
r.raise_for_status():如果不是200,產生異常requests.HTTPErrot
3)爬取網頁的通用程式碼框架:
import requests#匯入Requests庫
def getHTMLText(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "產生異常"
if _name_=="__main__":
    url = "http://www.baidu.com"
    print(getHTMLText((url))
4)HTTP協議
URL路徑格式:http://host[:port][path]
host:合法的Internet主機域名或IP地址
port;埠號,預設埠為80
path:請求資源的路徑
HTTP協議對資源的操作:GET,HEAD 取資源|發資源 POST,PUT,PATCH,DELETE
(3)request方法
引數:
四、Robots Exclusion Standard 網路爬蟲排除標準
1、網路爬蟲的限制
(1)來源審查:判斷User-agent進行限制
檢查來訪HTTP協議頭的User-agent域,只響應瀏覽器或友好爬蟲的訪問
(2)釋出公告:Robots協議
告知所有爬蟲網站的爬取策略,要求爬蟲遵守
2、robots協議基本語法
User-agent:*
Disallow:/
#註釋,*代表所有,/代表根目錄
3、 robots協議的作用:告知網路爬蟲哪些頁面可以抓取,哪些不行
    robots協議的形式:在網站根目錄下的robots.txt檔案。
    robots協議的使用:網路爬蟲自動或人工識別robots.txt,再進行內容爬取。
        Robots協議是建議但非約束性的,網路爬蟲可以不遵守,但存在法律風險。類人類行為可不參考Robots協議。

五、Requests庫例項
例項1:京東商品頁面的爬取
例項2:Amazon商品頁面的爬取
例項3:百度、360搜尋關鍵詞提交
例項4:網路圖片的爬取和儲存
例項5:IP地址歸屬地的自動查詢
得出:要以爬蟲視角看待網路資源,任何事物都有它自己的URL,通過URL獲取它

六、BeautifulSoup庫是解析、遍歷、維護、"標籤樹"的功能庫。
1、BeautifulSoup的安裝:pip install beautifulsoup4


怎麼使用BeautifulSoup庫呢?
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>data<p>','html.parser'
把HTML中的標籤——》標籤樹——》BeautifulSoup類
parser解析器
2、bs4庫的基本元素
tag標籤,name標籤的名字,atttributes標籤的屬性,navigableString標籤之間的字串,comment標籤之間註釋的字串
3、bs4庫的遍歷功能
下行遍歷.contents,.children,.descendants
上行遍歷:.parent,.parents
平行遍歷:.next_sibling,.previous_sibling,.next_siblings,.previous_siblings
4、三種資訊標記型別
XML(eXtensible Markup Language):是一種用尖括號<>標記資訊的表達形式
JSON(JavaScript Object Notation):是一種用鍵值對"":""(要有雙引號)標記資訊的表達形式
YAML(YAML Ain't Markup Language):是一種用無型別標記資訊的表達形式
5、資訊提取的一般方法
(1)完整解析資訊的標記形式,再提取關鍵資訊。eg:bs4庫的標籤樹遍歷
(2)無視標記形式,直接搜尋關鍵資訊
(3)融合方法:結合形式解析與搜尋方法,提取關鍵資訊。
需要標記解析器及文字查詢函式
XML:用資訊提取的一般方法
JSON:<tag>(...) 等價於 <tag>.find
YAML:soup(...) 等價於 soup.find 
小例項:
提取HTML中所有URL連結
思路:1)搜尋到所有<a>標籤樹    
        2)解析<a>標籤格式,提取href後的連結內容
.find_all(name,attrs,recursive,string,**kwargs)
6、中國大學排名例項:
功能描述:
輸入:大學排名URL連結
輸出:大學排名資訊的螢幕輸出(排名,大學名稱,總分)
技術路線:requests,bs4
定向爬蟲:僅對輸入URL進行爬取,不擴充套件爬取。
程式結構設計:
步驟1:從網路上獲取大學排名網頁內容
    getHTMLText()
步驟2:提取網頁內容中資訊到合適的資料結構
    fillUnivList()
步驟3:利用資料結構展示輸出結果
    printUnivList()