python如何獲取網絡數據
Retrieving Data over HTTP
Python 內置瞭 sockets 可以實現與網絡連接並通過 Python 提取數據的功能。
socket 是可以提供雙向連接的,我們可以對同一個 socket 進行讀寫操作。比方說,A 對 socket 寫入信息,並且將其發送給 socket 連接另一端 B;那麼 B 讀取 socket 的內容就可以得到 A 的信息。但是這樣會有一個問題,比如說, A端並沒有發送任何信息,而 B 端一直在嘗試讀取 socket 的內容,那麼 A 端和 B 端隻能陷入漫長的等待。所以就引入瞭通信協議。協議通過規定誰先發送,誰後響應等來規避上述的問題。
import socket mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect(('fakeserver.com', 80)) # connect to server cmd = 'GET http://fakeserver.com/fake.txt HTTP/1.0\r\n\r\n'.encode() # send GET command followed by a blank line mysock.send(cmd) while True: # receive data and print out data = mysock.recv(512) if (len(data) < 1): break print(data.decode()) mysock.close()
Retrieving Data with urllib
利用 socket 我們可以與網站服務器,郵件服務器等建立連接。但是在建立連接之前,我們需要查詢文檔瞭解通信協議,然後根據協議編寫程序。所以相較於 socket 這種黑魔法,我們可以利用更為簡單的 Python Package。
利用 urllib.urlopen()
打開網頁後,我們就可以讀取數據,像讀取本地文件一樣。
import urllib.request fhand = urllib.request.urlopen('http://fakeserver.com/fake.txt') for line in fhand: #convert UTF-8 to unicode string and print out print(line.decode().strip())
因為 urllib 使用簡潔方便,所以也常用與網絡爬蟲。網絡爬蟲除瞭要網頁讀取數據以外還需要在 HTML 格式中解釋出可用數據,所以除瞭 urllib 還有另一常用利器就是 BeautifulSoup。
import urllib.request, urllib.parse, urllib.error from bs4 import BeautifulSoup import ssl # Ignore SSL certificate errors ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE html = urllib.request.urlopen('http://fakeserver.com/fake.html', context=ctx).read() soup = BeautifulSoup(html, 'html.parser') tags = soup('a') # Retrieve all of the anchor tags for tag in tags: print(tag.get('href', None))
Retrieving Data from XML
在網絡交換數據,我們常用的格式有兩種,一是 XML; 二是 JSON。
XML 長得就像是 HTML 的近親,可以看做是樹的一種。利用 Python Package ElementTree 我們可以將 XML 文件轉換為樹,這樣可以方便我們後續提取有效的數據。
import xml.etree.ElementTree as ET data = ''' <person> <name>Jack</name> <phone>+123456789</phone> <email office="yes"/> </person> ''' tree = ET.fromstring(data) # convert xml into a tree print('Name:', tree.find('name').text) print('Attr:', tree.find('email').get('office'))
Retrieving Data from JSON
JSON 結構相較於 XML 來說更為簡單,所以他的功能就沒有那麼強大。但是 JSON 有一個優勢就是可以直接映射到 Python 的 dictionaries 和 lists 中,非常實用。
我們可以直接利用 Python Package json 來解釋 JSON。
import json data = ''' { "name" : "Jack", "phone" : { "type" : "intl", "number" : "+123456789" }, "email" : { "office" : "yes" } } ''' info = json.loads(data) # convert json into a dictianary print('Name:', info['name']) print('Attr:', info['email']['office'])
作者:Yuki
出處:https://www.cnblogs.com/yukiwu/
以上就是python如何獲取網絡數據的詳細內容,更多關於python獲取網絡數據的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- None Found