爬蟲,我的簡單理解就是通過寫定的程序,利用計算機的高速的優勢,批量高效的獲取數據的一種機制。通常我們訪問網站是通過瀏覽器,而爬蟲就是通過程序訪問網站,也就是讓程序偽裝成瀏覽器進行訪問。
Request偽裝瀏覽器發送請求應用實例
import requests
res = requests.get(
url='https://blog.csdn.net/BBJG_001', # 我的CSDN個人主頁
)
print(res.url)
# https://blog.csdn.net/BBJG_001
print(res.text) # 查看整個網頁(html的形式),就是在瀏覽器中查看網頁源代碼所看到的的內容
# 這裡只截取開始幾行來顯示
#
#
#
#
# <link>
BeautifulSoup
是一個用來解析html頁面的模塊,可以接收一個html或xml的字符串,通過其中封裝的方法可以很方便的根據標籤以及標籤的屬性獲得html頁面中的標籤所含的內容。
在此之前,爬取的頁面的解析往往是通過正則表達式來完成的,而正則表達式的使用不是那麼容易的
這裡以我的CSDN個人主頁為例來說明BeautifulSoup模塊的使用
導入支持包
import requests
from bs4 import BeautifulSoup # 解析html網頁的
獲取網頁
res = requests.get(
url='https://blog.csdn.net/BBJG_001', # 我的CSDN個人主頁
)
用獲取的網頁封裝BeautifulSoup對象
soup = BeautifulSoup(res.text, 'html.parser')
在瀏覽器中訪問上面的網頁,按F12查看源碼
看到目錄主體都在class=‘article-list’的div下
展開一個文章項目
其中一個h4標籤中封裝這標題一行,包含著指向文章詳細內容的鏈接
根據上面的結構從BeautifulSoup中獲取內容
div = soup.find(name='div', attrs={'class': 'article-list'})
# find:找到閾值相匹配的第一個標籤
# 通過class進行find的時候,要格外注意一下,因為不同的標籤的class值可能是相同,
# 這裡我通過查看源碼確認了該class值只在這個div才有
# 通過id尋找是一種比較準確的方式,因為通過id匹配是唯一的
# 在class相同的情況下,可以通過多指定幾個屬性的方式增加定位的精確度
h4_list = div.find_all(name='h4')
# find_all:找對與之相匹配的所有標籤
a_list = [h4.find(name='a') for h4 in h4_list] # 從h4列表中提取出a標籤
data = {}
for a in a_list:
link = a.attrs.get('href') # 獲取標籤的某個屬性
content = a.text# 獲取標籤中間的內容
print(link)
# 只給出部分做顯示
# https://blog.csdn.net/BBJG_001/article/details/104587102
# https://blog.csdn.net/BBJG_001/article/details/104587067
# https://blog.csdn.net/BBJG_001/article/details/104587033
獲取圖片舉例
注意這裡跟上面沒有什麼關係,只是為了介紹這個功能而做的測試
r2 = requests.get('https://imgconvert.csdnimg.cn/aHR0cHM6Ly96eWRzdG9yZS0xMjU4NDc3NzE0LmNvcy5hcC1iZWlqaW5nLm15cWNsb3VkLmNvbS90eXBvcmEvMjAyMDAyMjMxNTE2MDctMTE5ODQ0LnBuZw?x-oss-process=image/format,png')
savepath = r'data/pictures/test01.png'
with open(savepath, 'wb') as f: # 因為下載的是圖片,所以是wb,以二進制流寫入
f.write(r2.content)
# ret.text 將結果ret轉換成字符串,ret.content直接是二進制文件
實際應用中可以find到網頁中獲得的img標籤中的src屬性,根據src獲取文件,並進行保存,注意保存圖片時文件打開方式為wb,f.write()中的傳參為二進制形式
防爬蟲機制
要說明的是,不是所有的網站內容都是可以爬取,或者說不是那麼容易爬取的
瀏覽器在發送請求時,除了會攜帶一些服務器所需的認證信息(用戶名/密碼/token等),還會攜帶一些瀏覽器本身的信息,比較簡單的防爬蟲機制就是去檢測發送的信息中的這些瀏覽器信息,如果信息不完善或不匹配,訪問目標可能會駁回通過代碼發送的訪問請求
通過在代碼中追加瀏覽器信息可以騙過防爬蟲措施不到位的網站
山東掌趣網絡科技
閱讀更多 掌趣網絡 的文章