學python爬蟲時,發現對選擇器很不熟悉,所以在這兒做做筆記。
s1 通過tag標籤逐層查詢:
soup.select("body a")
# [class="sister"
href=""
id="link1">elsiea>,
# class="sister"
href=""
id="link2">laciea>,
# class="sister"
href=""
id="link3">tilliea>]
soup.select("html head title")
# [the dormouse's storytitle>]
2 找到某個tag標籤下的直接子標籤 :
soup.select("head > title")
# [the dormouse's story]
soup.select("p > a")
# [elsiea>,
# laciea>,
# tilliea>]
soup.select("p > a:nth-of-type(2)")
# [laciea>]
soup.select("p > #link1")
# [elsiea>]
soup.select("body > a")
#
3 找到兄弟節點標籤:
soup.select("#link1 ~ .sister")
# [laciea>,
# tilliea>]
soup.select("#link1 + .sister")
# [laciea>]
4 通過css的類名查詢:
soup.select(".sister")
# [elsiea>,
# laciea>,
# tilliea>]
soup.select("[class~=sister]")
# [elsiea>,
# laciea>,
# tilliea>]
5 通過tag的id查詢:
soup.select("#link1")
# [elsiea>]
soup.select("a#link2")
# [laciea>]
6 同時用多種css選擇器查詢元素:
soup.select("#link1,#link2")
# [elsiea>,
# laciea>]
7 通過是否存在某個屬性來查詢:
soup.select('a[href]')
# [elsiea>,
# laciea>,
# tilliea>]
8 通過屬性的值來查詢:
# [elsiea>]9 通過語言設定來查詢:
multilingual_markup = """
lang="en">hellop>
lang="en-us">howdy, y'allp>
lang="en-gb">pip-pip, old fruitp>
lang="fr">bonjour mes amisp>
"""multilingual_soup = beautifulsoup(multilingual_markup)
multilingual_soup.select('p[lang|=en]')
# [lang="en">hellop>,
# lang="en-us">howdy, y'allp>,
# lang="en-gb">pip-pip, old fruitp>]
10 返回查詢到的元素的第乙個:
soup.select_one(".sister")
# elsiea>
對於熟悉css選擇器語法的人來說這是個非常方便的方法.beautiful soup也支援css選擇器api, 如果你僅僅需要css選擇器的功能,那麼直接使用 lxml 也可以, 而且速度更快,支援更多的css選擇器語法,但beautiful soup整合了css選擇器的語法和自身方便使用api. Python中Beautifulsoup學習筆記二
1 用tag獲取相應 塊的剖析樹 contents屬性是乙個列表,裡面儲存了該剖析樹的直接兒子。如 1 html soup.contents 0 2 head html.contents 0 3 body html.contents 1 2 用contents,parent,nextsibling,...
Beautiful Soup在爬蟲中的基本使用語法
beautiful soup是python 的乙個html 或 xml的解析庫,借助網頁的結構和屬性特徵來解析網頁,便於使用者抓取資料。beautiful soup能夠自動將輸入的文件轉化為unicode,輸出的文件轉換為utf 8,這大大提高了文件提取的效率。基本用法如下 beautifulsou...
關於BeautifulSoup中字元的編碼
在使用beautifulsoup解析html檔案的過程中,經常使用到類似如下的語句 soup beautifulsoup html for string in soup.strings string string.strip 注意,上述 中,沒有對string的編碼進行任何的設定,所以string的...