我們通過 from bs4 import beautifulsoup 語句匯入 beautifulsoup,然後使用 beautifulsoup(res.text, 'html.parser') 語句將網頁源**的字串形式解析成了 beautifulsoup 物件。
建立 beautifulsoup 物件時需要傳入兩個引數,第乙個引數是要解析的 html 文字,即**源**的字串形式(res.text)。第二個引數是解析 html 的解析器,html.parser 是 python 中內建的解析器
我們通過多次呼叫 find() 或 find_all() 方法一層層地找到了我們需要的資料。你可能會問,有沒有什麼方法可以直接就找到我們需要的資料,而不用多次查詢嗎?
答案是肯定的,需要用到 css 選擇器,
在 css 選擇器中,# 代表 id,. 代表 class。比如:#login 表示 id='login' 的所有元素,.item 表示 class='item' 的所有元素。
它們也可以組合在一起,選擇同時符合條件的元素,比如:a#login表示所有 id='login' 的 a 元素,p.item 表示所有 class='item' 的 p 元素,#login.item表示所有 id='login' 且 class='item' 的元素,.item.book 表示所有 class 同時為 item 和 book 的元素。
選擇同時符合條件的元素,選擇器之間不能有空格
當兩個選擇器之間加了空格,表示子元素選擇。還是以.item .book為例,它表示選擇所有 class='item' 的元素裡面 class='book' 的元素,即巢狀在 class='item' 的元素裡面 class='book' 的元素。
這個巢狀可以是任意層級的,只要在裡面就行,不要求直接巢狀在第一層。如果只需要直接巢狀在第一層符合條件的元素,可以用 > 分隔。比如:.item > .book。
來看個例子感受一下它們的區別:
1from bs4 import
beautifulsoup
23 html = '''45
小王子6
7追風箏的人89
'''10
11 soup = beautifulsoup(html, '
html.parser')
1213
print(soup.select('
.item.book'))
14#輸出:15
16print(soup.select('
.item .book'))
17#輸出:[小王子
, 追風箏的人]18
19print(soup.select('
.item > .book'))
20#輸出:[小王子
]
1import
requests
2from bs4 import
beautifulsoup
34 headers =
7 res = requests.get('
', headers=headers)
8 soup = beautifulsoup(res.text, '
html.parser')
9items = soup.select('div.pl2 a')10
for i in
items:11#
提取書名
12 name = i['
title']
13#提取鏈結
14 link = i['
href']
15print(name, link)
1import
requests
2from bs4 import
beautifulsoup
34 headers =
7 res = requests.get('
', headers=headers)
8 soup = beautifulsoup(res.text, '
html.parser')
9items = soup.find_all('div', class_='pl2')10
for i in
items:
11 tag = i.find('a'
)12#去掉空格和換行符
13 name = ''
.join(tag.text.split())
14 link = tag['
href']
15print
(name, link)16#
輸出:17
#追風箏的人
解憂雜貨店
小王子
白夜行
活著 嫌疑人x的獻身
省略餘下內容...
網頁爬蟲 靜態網頁《一》
一 通過jsoup請求獲取 網頁審查元素。eg request path document doc jsoup.connect request path get 二 檢視需要扣取資料的標籤,通過日誌輸出 doc的body。eg log.v tag,body doc.body 三 檢視列印的日誌,找到...
靜態網頁的爬蟲嘗試
去年寫的乙個簡單爬蟲,爬去全書網的盜墓筆記的部分章節,還是比較簡單的,但是現在看來還有很多小問題沒處理 鑑於只是第一次嘗試,保留下 以後看看回想思路比較合適,就不再去完善 了。import requests from bs4 import beautifulsoup class download o...
python爬蟲 2 靜態網頁抓取
獲取響應內容 import requests r requests.get print 文字編碼 r.encoding 伺服器使用的文字編碼 print 響應狀態碼 r.status code 檢測響應的狀態碼,200為成功,4xx為客戶端錯誤,5xx為伺服器錯誤響應 print 字串方式的響應體 ...