怎麼利用Python網路爬蟲來提取資訊
下面小編就為大家帶來一篇Python網路爬蟲與資訊提取(例項講解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
課程體系結構:
1、Requests框架:自動爬取HTML頁面與自動網路請求提交
2、robots.txt:網路爬蟲排除標準
3、BeautifulSoup框架:解析HTML頁面
4、Re框架:正則框架,提取頁面關鍵資訊
5、Scrapy框架:網路爬蟲原理介紹,專業爬蟲框架介紹
理念:The Website is the API …
Python語言常用的IDE工具
文字工具類IDE:
IDLE、Notepad++、Sublime Text、Vim & Emacs、Atom、Komodo Edit
整合工具IDE:
PyCharm、Wing、PyDev & Eclipse、Visual Studio、Anaconda & Spyder、Canopy
·IDLE是Python自帶的預設的常用的入門級編寫工具,它包含互動式檔案式兩種方式。適用於較短的程式。
·Sublime Text是專為程式設計師開發的第三方專用程式設計工具,可以提高程式設計體驗,具有多種程式設計風格。
·Wing是Wingware公司提供的收費IDE,除錯功能豐富,具有版本控制,版本同步功能,適合於多人共同開發。適用於編寫大型程式。
·Visual Studio是微軟公司維護的,可以透過配置PTVS編寫Python,主要以Windows環境為主,除錯功能豐富。
·Eclipse是一款開源的IDE開發工具,可以透過配置PyDev來編寫Python,但是配置過程複雜,需要有一定的開發經驗。
·PyCharm分為社群版和專業版,社群版免費,具有簡單、整合度高的特點,適用於編寫較複雜的工程。
適用於科學計算、資料分析的IDE:
·Canopy是由Enthought公司維護的收費工具,支援近500個第三方庫,適合科學計算領域應用開發。
·Anaconda是開源免費的,支援近800個第三方庫。
Requests庫入門
Requests的安裝:
Requests庫是目前公認的爬取網頁最好的Python第三方庫,具有簡單、簡捷的特點。
官方網站:
在"C:\Windows\System32"中找到"cmd.exe",使用管理員身份執行,在命令列中輸入:“pip install requests”執行。
使用IDLE測試Requests庫:
>>> import requests
>>> r = requests.get(")#抓取百度頁面
>>> r.status_code
>>> r.encoding = 'utf-8'
>>> r.text
1
2
3
4
5
Requests庫的7個主要方法
get()方法
r = requests.get(url)
get()方法構造一個向伺服器請求資源的Request物件,返回一個包含伺服器資源的Response物件。
requests.get(url, params=None, **kwargs)
url:擬獲取頁面的url連結
params:url中的額外引數,字典或位元組流格式,可選
**kwargs:12個控制訪問引數
Requests庫的2個重要物件
· Request
· Response:Response物件包含爬蟲返回的內容
Response物件的屬性
r.status_code :HTTP請求的返回狀態,200表示連線成功,404表示失敗
r.text :HTTP響應內容的字串形式,即,url對應的頁面內容
r.encoding : 從HTTP header中猜測的相應內容編碼方式
r.apparent_encoding : 從內容中分析出的相應內容編碼方式(備選編碼方式)
r.content : HTTP響應內容的二進位制形式
r.encoding :如果header中不存在charset,則認為編碼為ISO-8859-1 。
r.apparent_encoding :根據網頁內容分析出的編碼方式可以 看作是r.encoding的備選。
Response的編碼:
r.encoding :
從HTTP header中猜測的響應內容的編碼方式;如果header中不存在charset,則認為編碼為ISO-8859-1,r.text根據r.encoding顯示網頁內容
r.apparent_encoding : 根據網頁內容分析出的編碼方式,可以看作r.encoding的備選
爬取網頁的通用程式碼框架
Requests庫的異常
Response的異常
r.raise_for_status() : 如果不是200,產生異常requests.HTTPError;
在方法內部判斷r.status_code是否等於200,不需要增加額外的if語句,該語句便於利用try-except進行異常處理
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() # 如果狀態不是200,引發HTTPError異常
r.encoding = r.apparent_encoding
return r.text
except:
return "產生異常"
if __name__ == "__main__":
url = "
print(getHTMLText(url))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
通用程式碼框架,可以使使用者爬取網頁變得更有效,更穩定、可靠。
HTTP協議
HTTP,Hypertext Transfer Protocol,超文字傳輸協議。
HTTP是一個基於“請求與響應”模式的、無狀態的應用層協議。
HTTP協議採用URL作為定位網路資源的標識。
URL格式:[:port][path]
· host:合法的Internet主機域名或IP地址
· port:埠號,預設埠號為80
· path:請求資源的路徑
HTTP URL的理解:
URL是透過HTTP協議存取資源的Internet路徑,一個URL對應一個資料資源。
HTTP協議對資源的操作
理解PATCH和PUT的區別
假設URL位置有一組資料UserInfo,包括UserID、UserName等20個欄位。
需求:使用者修改了UserName,其他不變。
· 採用PATCH,僅向URL提交UserName的區域性更新請求。
· 採用PUT,必須將所有20個欄位一併提交到URL,未提交欄位被刪除。
PATCH的主要好處:節省網路頻寬
Requests庫主要方法解析
requests.request(method, url, **kwargs)
· method:請求方式,對應get/put/post等7種
例: r = requests.request(‘OPTIONS’, url, **kwargs)
· url:擬獲取頁面的url連結
· **kwargs:控制訪問的引數,共13個,均為可選項
params:字典或位元組序列,作為引數增加到url中;
kv = {'key1':'value1', 'key2':'value2'}
r = requests.request('GET', ')
print(r.url)
'''
'''
1
2
3
4
5
6
data:字典、位元組序列或檔案物件,作為Request的內容;
json:JSON格式的資料,作為Request的內容;
headers:字典,HTTP定製頭;
hd = {'user-agent':'Chrome/10'}
r = requests.request('POST',')
1
2
3
cookies:字典或CookieJar,Request中的cookie;
auth:元組,支援HTTP認證功能;
files:字典型別,傳輸檔案;
fs = {'file':open('data.xls', 'rb')}
r = requests.request('POST',')
1
2
3
timeout:設定超時時間,秒為單位;
proxies:字典型別,設定訪問代理伺服器,可以增加登入認證
allow_redirects:True/False,預設為True,重定向開關;
stream:True/False,預設為True,獲取內容立即下載開關;
verify:True/False,預設為True,認證SSL證照開關;
cert:本地SSL證照路徑
#方法及引數
requests.get(url, params=None, **kwargs)
requests.head(url, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.delete(url, **kwargs)
1
2
3
4
5
6
7
網路爬蟲引發的問題
效能騷擾:
受限於編寫水平和目的,網路爬蟲將會為web伺服器帶來巨大的資源開銷
法律風險:
伺服器上的資料有產權歸屬,網路爬蟲獲取資料後牟利將帶來法律風險。
隱私洩露:
網路爬蟲可能具備突破簡單訪問控制的能力,獲得被保護資料從而洩露個人隱私。
網路爬蟲的限制
·來源審查:加密貨幣http://www.gendan5.com/digitalcurrency/btc.html
判斷User-Agent進行限制
檢查來訪HTTP協議頭的User-Agent域,值響應瀏覽器或友好爬蟲的訪問。
· 釋出公告:Roots協議
告知所有爬蟲網站的爬取策咯,要求爬蟲遵守。
Robots協議
Robots Exclusion Standard 網路爬蟲排除標準
作用:網站告知網路爬蟲哪些頁面可以抓取,哪些不行。
形式:在網站根目錄下的robots.txt檔案。
案例:京東的Robots協議
# 註釋:*代表所有,/代表根目錄
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
1
2
3
4
5
6
7
8
9
10
11
12
13
Robots協議的使用
網路爬蟲:自動或人工識別robots.txt,再進行內容爬取。
約束性:Robots協議是建議但非約束性,網路爬蟲可以不遵守,但存在法律風險。
Requests庫網路爬蟲實戰
1、京東商品
import requests
url = "
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失敗")
1
2
3
4
5
6
7
8
9
2、亞馬遜商品
# 直接爬取亞馬遜商品是會被拒絕訪問,所以需要新增'user-agent'欄位
import requests
url = "
try:
kv = {'user-agent':'Mozilla/5.0'} # 使用代理訪問
r = requests.get(url, headers = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(t.text[1000:2000])
except:
print("爬取失敗"
1
2
3
4
5
6
7
8
9
10
11
3、百度/360搜尋關鍵詞提交
搜尋引擎關鍵詞提交介面
· 百度的關鍵詞介面:
· 360的關鍵詞介面:
# 百度
import requests
keyword = "Python"
try:
kv = {'wd':keyword}
r = requests.get(")
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失敗")
1
2
3
4
5
6
7
8
9
10
11
# 360
import requests
keyword = "Python"
try:
kv = {'q':keyword}
r = requests.get(")
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失敗")
1
2
3
4
5
6
7
8
9
10
11
4、網路圖片的爬取和儲存
網路圖片連結的格式:
國家地理:
選擇一張圖片連結:
http://image.nationalgeographic.com.cn/2017/0704/20170704030835566.jpg
圖片爬取全程式碼
import requests
import os
url = "http://image.nationalgeographic.com.cn/2017/0704/20170704030835566.jpg"
root = "D://pics//"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,'wb') as f:
f.write(r.content)
f.close()
print("檔案儲存成功")
else:
print("檔案已存在")
except:
print("爬取失敗")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
5、IP地址歸屬地的自動查詢
IP查詢
import requests
url = "
ip = "220.204.80.112"
try:
r = requests.get(url + ip)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1900:])
except:
print("爬取失敗")
1
2
3
4
5
6
7
8
9
10
# 使用IDLE
>>> import requests
>>> url ="
>>> ip = "220.204.80.112"
>>> r = requests.get(url + ip)
>>> r.status_code
>>> r.text
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2681670/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- 網路爬蟲怎麼使用ip代理爬蟲
- 什麼是Python網路爬蟲?常見的網路爬蟲有哪些?Python爬蟲
- 利用Python爬蟲獲取招聘網站職位資訊Python爬蟲網站
- 什麼是網路爬蟲?為什麼用Python寫爬蟲?爬蟲Python
- 個人利用Python爬蟲技術怎麼掙錢Python爬蟲
- 網路爬蟲有什麼用?怎麼爬?手把手教你爬網頁(Python程式碼)爬蟲網頁Python
- python網路爬蟲_Python爬蟲:30個小時搞定Python網路爬蟲視訊教程Python爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- python DHT網路爬蟲Python爬蟲
- 利用Python網路爬蟲抓取網易雲音樂歌詞Python爬蟲
- Python 爬蟲網頁內容提取工具xpath(一)Python爬蟲網頁
- Python 爬蟲網頁內容提取工具xpath(二)Python爬蟲網頁
- 《用Python寫網路爬蟲》--編寫第一個網路爬蟲Python爬蟲
- 【Python爬蟲9】Python網路爬蟲例項實戰Python爬蟲
- 什麼是網路爬蟲爬蟲
- 什麼是網路爬蟲?爬蟲
- 網路爬蟲是什麼?爬蟲
- python網路爬蟲(14)使用Scrapy搭建爬蟲框架Python爬蟲框架
- python爬蟲怎麼翻頁Python爬蟲
- 網路爬蟲技術手段有哪些?怎麼檢測是否為爬蟲IP?爬蟲
- 我的 Python 網路爬蟲直播分享要來了!Python爬蟲
- 專案--python網路爬蟲Python爬蟲
- python網路爬蟲合法嗎Python爬蟲
- 網路爬蟲(python專案)爬蟲Python
- Python網路爬蟲實戰Python爬蟲
- Python網路爬蟲二三事Python爬蟲
- Python【爬蟲實戰】提取資料Python爬蟲
- python網路爬蟲(9)構建基礎爬蟲思路Python爬蟲
- python爬蟲--招聘資訊Python爬蟲
- python網路爬蟲--爬取淘寶聯盟Python爬蟲
- 利用 Python 爬蟲實現快遞物流資訊查詢Python爬蟲
- 網路爬蟲爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 手把手教你利用爬蟲爬網頁(Python程式碼)爬蟲網頁Python
- python網路爬蟲筆記(一)Python爬蟲筆記
- Python網路爬蟲(六) Scrapy框架Python爬蟲框架