您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“python獲取網(wǎng)絡(luò)數(shù)據(jù)的方法”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“python獲取網(wǎng)絡(luò)數(shù)據(jù)的方法”吧!
Python 內(nèi)置了 sockets 可以實(shí)現(xiàn)與網(wǎng)絡(luò)連接并通過(guò) Python 提取數(shù)據(jù)的功能。
socket 是可以提供雙向連接的,我們可以對(duì)同一個(gè) socket 進(jìn)行讀寫(xiě)操作。比方說(shuō),A 對(duì) socket 寫(xiě)入信息,并且將其發(fā)送給 socket 連接另一端 B;那么 B 讀取 socket 的內(nèi)容就可以得到 A 的信息。但是這樣會(huì)有一個(gè)問(wèn)題,比如說(shuō), A端并沒(méi)有發(fā)送任何信息,而 B 端一直在嘗試讀取 socket 的內(nèi)容,那么 A 端和 B 端只能陷入漫長(zhǎng)的等待。所以就引入了通信協(xié)議。協(xié)議通過(guò)規(guī)定誰(shuí)先發(fā)送,誰(shuí)后響應(yīng)等來(lái)規(guī)避上述的問(wèn)題。
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()
利用 socket 我們可以與網(wǎng)站服務(wù)器,郵件服務(wù)器等建立連接。但是在建立連接之前,我們需要查詢文檔了解通信協(xié)議,然后根據(jù)協(xié)議編寫(xiě)程序。所以相較于 socket 這種黑魔法,我們可以利用更為簡(jiǎn)單的 Python Package。
利用 urllib.urlopen()
打開(kāi)網(wǎng)頁(yè)后,我們就可以讀取數(shù)據(jù),像讀取本地文件一樣。
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())
因?yàn)?urllib 使用簡(jiǎn)潔方便,所以也常用與網(wǎng)絡(luò)爬蟲(chóng)。網(wǎng)絡(luò)爬蟲(chóng)除了要網(wǎng)頁(yè)讀取數(shù)據(jù)以外還需要在 HTML 格式中解釋出可用數(shù)據(jù),所以除了 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))
在網(wǎng)絡(luò)交換數(shù)據(jù),我們常用的格式有兩種,一是 XML; 二是 JSON。
XML 長(zhǎng)得就像是 HTML 的近親,可以看做是樹(shù)的一種。利用 Python Package ElementTree 我們可以將 XML 文件轉(zhuǎn)換為樹(shù),這樣可以方便我們后續(xù)提取有效的數(shù)據(jù)。
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'))
JSON 結(jié)構(gòu)相較于 XML 來(lái)說(shuō)更為簡(jiǎn)單,所以他的功能就沒(méi)有那么強(qiáng)大。但是 JSON 有一個(gè)優(yōu)勢(shì)就是可以直接映射到 Python 的 dictionaries 和 lists 中,非常實(shí)用。
我們可以直接利用 Python Package json 來(lái)解釋 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'])
到此,相信大家對(duì)“python獲取網(wǎng)絡(luò)數(shù)據(jù)的方法”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。