python用select 找到需要標籤後,無法使用.get_text()?

代碼如下 :
from bs4 import BeautifulSoup
import requests
import csv
import codecs

url = "http://www.spb.gov.cn/dtxx_15079/201612/t20161214_933175.html"
web_data = requests.get(url)
web_data.encoding = "utf-8"
soup = BeautifulSoup(web_data.text, lxml)
a =soup.select(#article-content &> div.content &> div.TRS_Editor &> p:nth-of-type(2))
a=a.get_text()

print(a)

提示沒有get_text方法,新手很不理解原因。


這樣的


Select 會返回一個列表, 列表中元素為tag對象. 而get_text() 只能用於tag對象.

所以如果你想用get_text()的話, 只能把列表中元素取出來.如:

for i in a:
print(i.get_text())

如果列表中只有一個元素的話, 那麼可以這樣做:

a[0].get_text()

當然也可以用bs4中的select_one()方法, 和上面的是等價的, 不過更安全一點:

a =soup.select_one(#article-content &> div.content &> div.TRS_Editor &> p:nth-of-type(2))
a=a.get_text()

與之對應的還有:

find() # 返回find_all中的第一個元素
find_all() # 返回一個列表

至於為什麼說這些方法比select()[0]安全, 主要還是IndexError的問題, 當你的解析式寫錯的時候, select()會返回一個空列表, 任何索引都會引起IndexError, 但是當我們使用select_one的時候, 它只會返回None.


推薦閱讀:

python 3.5 使用 BeautifulSoup 解析中文網頁的中文全是亂碼?

TAG:Python | 爬蟲計算機網路 | beautifulsoup |