使用 Python 語言從網路上取得資料是一項非常常見的任務。 Python 有一個名為 requests 的函式庫,它是一個 Python 的 HTTP 用戶端函式庫,用於向 Web 伺服器發起 HTTP 請求。
我們可以透過以下程式碼使用 requests 函式庫向指定的 URL 發起 HTTP 請求:
import requests response = requests.get('<http://www.example.com>')
其中,response
物件將包含伺服器傳回的回應。使用 response.text
可以取得回應的文字內容。
此外,我們還可以使用以下程式碼來取得二進位資源:
import requests response = requests.get('<http://www.example.com/image.png>') with open('image.png', 'wb') as f: f.write(response.content)
使用 response.content
可以取得伺服器傳回的二進位資料。
爬蟲是一種自動化程序,可以透過網路爬取網頁數據,並將其儲存在資料庫或檔案中。爬蟲在資料收集、資訊監控、內容分析等領域有廣泛的應用。 Python 語言是爬蟲編寫的常用語言,因為它具有簡單易學、程式碼量少、函式庫豐富等優點。
我們以「豆瓣電影」為例,介紹如何使用 Python 寫爬蟲程式碼。首先,我們使用 requests 庫來取得網頁的 HTML 程式碼,然後將整個程式碼看成一個長字串,使用正規表示式的捕獲組從字串中提取所需的內容。
豆瓣電影Top250 頁面的網址是https://movie.douban.com/top250?start=0
,其中start
參數表示從第幾個電影開始獲取。每頁共展示了25 部電影,如果要獲取Top250 數據,我們共需要訪問10 個頁面,對應的地址是https://movie.douban.com/top250?start=xxx
,這裡的xxx
如果為0
就是第一頁,如果xxx
的值是100
,那麼我們可以存取到第五頁。
我們以取得影片的標題和評分為例,程式碼如下所示:
import re import requests import time import random for page in range(1, 11): resp = requests.get( url=f'<https://movie.douban.com/top250?start=>{(page - 1) * 25}', headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'} ) # 通过正则表达式获取class属性为title且标签体不以&开头的span标签并用捕获组提取标签内容 pattern1 = re.compile(r'<span class="title">([^&]*?)</span>') titles = pattern1.findall(resp.text) # 通过正则表达式获取class属性为rating_num的span标签并用捕获组提取标签内容 pattern2 = re.compile(r'<span class="rating_num".*?>(.*?)</span>') ranks = pattern2.findall(resp.text) # 使用zip压缩两个列表,循环遍历所有的电影标题和评分 for title, rank in zip(titles, ranks): print(title, rank) # 随机休眠1-5秒,避免爬取页面过于频繁 time.sleep(random.random() * 4 + 1)
在上述程式碼中,我們透過正規表示式取得標籤體為標題和評分的span 標籤,並用捕獲組提取標籤內容。使用 zip
壓縮兩個列表,循環遍歷所有電影標題和評分。
許多網站對爬蟲程式比較反感,因為爬蟲程式會耗費掉它們很多的網路頻寬,並製造很多無效的流量。為了隱匿身份,通常需要使用 IP 代理來訪問網站。商業IP 代理程式(如蘑菇代理、芝麻代理、快代理等)是一個很好的選擇,使用商業IP 代理可以讓被爬取的網站無法獲取爬蟲程序來源的真實IP 地址,從而無法簡單的通過IP 地址對爬蟲程序進行封鎖。
以蘑菇代理為例,我們可以在該網站註冊一個帳號,然後購買相應的套餐來獲得商業 IP 代理。蘑菇代理提供了兩種存取代理的方式,分別是 API 私密代理和 HTTP 隧道代理,前者是透過請求蘑菇代理的 API 介面來取得代理伺服器位址,後者是直接使用統一的代理伺服器 IP 和連接埠。
使用IP 代理程式的程式碼如下所示:
import requests proxies = { 'http': '<http://username:password@ip>:port', 'https': '<https://username:password@ip>:port' } response = requests.get('<http://www.example.com>', proxies=proxies)
其中,username
和password
分別是蘑菇代理帳號的使用者名稱和密碼,ip
和port
分別是代理伺服器的IP 位址和連接埠號碼。請注意,不同的代理提供者的存取方式可能不同,需要根據實際情況進行相應的修改。
以上是Python網路爬蟲之怎麼取得網路數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!