2/2 資料獲取:網路資料的獲取
阿新 • • 發佈:2018-12-20
o. 抓取
1. urllib內建模組 — urllib.request
2. Request第三方庫
**Request庫:**
Requests 庫是最簡單、方便和人性化的Python HTTP第三方庫。Requests 官網:http://www.python-requests.org/ 。
基本方法 | 說明 |
---|---|
request.get() | 請求獲取指定URL位置的資源,對應HTTP協議的GET方法。 |
傳送請求獲得一個Response物件,這個物件包含Resquest請求資訊和伺服器的Response響應資訊,而Requests會自動解碼來自伺服器的資訊。假設響應內容是二進位制形式的,可以通過re.content進行解碼,re.text自動推測文字編碼並進行解碼,re.encoding修改文字編碼。
import requests
r = requests.get('https://book.douban.com/subject/1084336/comments/')
r.status_code
Out[4]: 200
r.text
import requests
re = requests.get('http://money.cnn.com/data/dow30')
print(re.text)
3. Scrapy框架
o. 解析
BeautifulSoup物件 | 說明 |
---|---|
Tag | HTML或XML文件中的標籤;Tag屬性的操作和字典一樣;Tag物件最重要的屬性包括name(獲得名字)和attribute() |
BeautifulSoup | 大部分內容都是Tag |
NavigableString | Tag當中的字串。NavigableString物件可以用string屬性來表示,取Tag中包含的非屬性的字串。 |
Comment | NavigableString的一個子類 |
from bs4 import BeautifulSoup markup = '<p class="title"><b>The Little Prince</b></p>' # 定義一個字串 soup = BeautifulSoup(markup, 'lxml') # 生成一個BeautifulSoup物件的soup soup.b # 任何的標籤內容都可以用“BeautifulSoup物件.tag”形式訪問得到 Out[22]: <b>The Little Prince</b> type(soup.b) #檢視型別 Out[23]: bs4.element.Tag
tag = soup.p
tag.name # 通過name屬性獲得名字
Out[25]: 'p'
tag.attrs
Out[26]: {'class': ['title']}
tag['class'] # 通過字典形式獲得屬性
Out[27]: ['title']
tag.string # NavigableString物件可以用string屬性來表示
Out[28]: 'The Little Prince'
type(tag.string)
Out[29]: bs4.element.NavigableString
soup.find_all('b') # 尋找所有b標籤的內容
Out[30]: [<b>The Little Prince</b>]
soup.find()# 只需要找第一個標籤內容
Out[31]: <html><body><p class="title"><b>The Little Prince</b></p></body></html>