【python爬蟲】BeautifulSoup庫的選擇器select()方法
阿新 • • 發佈:2019-01-23
一般使用BeautififulSoup解析得到的Soup文件可以使用
find_all()
、find()
、select()
方法定位所需要的元素。find_all()
是獲得list列表、find()
是獲得map一條資料。select()
是根據選擇器可以獲得多條也可以獲得單條資料。一般最常用的是find_all()
和find()
兩個引數。
select()方法的使用
- 從頁面中自定義獲得選擇器:
F12中選擇了目標element之後,右鍵—Copy—Copy selector 如圖:
nth-child
在Python中執行會報錯,需要改為nth-of-type
:
如果所複製的選擇器中包含nth-child
,則需要改為nth-of-type
,否則會報錯。- 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()) #獲取中間文字資訊