1. 程式人生 > >【python爬蟲】BeautifulSoup庫的選擇器select()方法

【python爬蟲】BeautifulSoup庫的選擇器select()方法

一般使用BeautififulSoup解析得到的Soup文件可以使用find_all()find()select() 方法定位所需要的元素。find_all()是獲得list列表、find() 是獲得map一條資料。select() 是根據選擇器可以獲得多條也可以獲得單條資料。一般最常用的是find_all()find() 兩個引數。

select()方法的使用

  1. 從頁面中自定義獲得選擇器:
    F12中選擇了目標element之後,右鍵—Copy—Copy selector 如圖:
    這裡寫圖片描述
  2. nth-child 在Python中執行會報錯,需要改為 nth-of-type:

    如果所複製的選擇器中包含nth-child,則需要改為nth-of-type,否則會報錯。
  3. demo:
import requests
from bs4 import BeautifulSoup
url = 'http://www.cnplugins.com/'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}
res = requests.get(url,headers = headers) #get方法中加入請求頭
#檢視下當前requests請求url抓去的資料編碼,這裡獲取的是ISO-8859-1 print (requests.get(url).encoding) #翻閱下要爬去的網站的編碼是什麼,這裡看了下是utf-8,編碼不一樣會亂碼,將requests獲取的資料編碼改為和目標網站相同,改為utf-8 res.encoding = 'utf-8' soup = BeautifulSoup(res.text, 'html.parser') #對返回的結果進行解析 # print (soup.select('body > section > div.wrapbox > div:nth-child(1) > div > ul > li:nth-child(6)'))
# nth-child 在python中執行會報錯,需改為 nth-of-type # print (soup.select('body > section > div.wrapbox > div:nth-of-type(1) > div > ul > li:nth-of-type(6)')) textlist = soup.select('body > section > div.wrapbox > div > div > ul > li > div.iimg-box-meta > a') for t in textlist: print (t) #獲取單條html資訊 print (t.get_text()) #獲取中間文字資訊