很多人學習python,爬蟲入門,在python爬蟲中,有很多庫供開發使用。 用於請求的urllib(python3)和request基本庫,xpath,beautiful soup,pyquery這樣的解析庫。其中xpath中用到大量的正則表示式,對於新手來說,寫正則很容易出錯,在這裡,從beau ...
很多人學習python,爬蟲入門,在python爬蟲中,有很多庫供開發使用。
用於請求的urllib(python3)和request基本庫,xpath,beautiful soup,pyquery這樣的解析庫。其中xpath中用到大量的正則表示式,對於新手來說,寫正則很容易出錯,在這裡,從beautiful soup開始說。
from beautiful_soup.constant import HTML_TEXT
from bs4 import BeautifulSoup
soup = BeautifulSoup(HTML_TEXT, 'lxml')
# 將html文件以標準的格式輸出, 會自動補全缺失的HTML結構
print(soup.prettify())
# 獲取title標簽的內容
print(soup.div.string)
# 獲取名稱
print(soup.div.name)
# 獲取屬性 屬性值多個,所以返回值為list列表
print(soup.div.attrs)
# 元素選擇可以嵌套 ,這樣的方式在多個的情況下,只取第一個,
# 比如body中有多個div,這裡取了第一個
print(soup.body.div.a.attrs)
# contents 屬性獲取直接的子節點 children屬性也是如此
用屬性選擇較快,但是遇到複雜的情況,就很不靈活,這時候我們需要調用beautiful_soup中的一些方法# find_all 查詢所有符合條件的元素
# find_all(name, attrs, recursive, text, **kwargs)
# name是屬性名 attrs是屬性
print(soup.find_all(name="ul"))
for ul in soup.find_all(name="ul"):
print(ul.find_all(name="li"))
# 屬性傳入夫人參數為字典格式
print(soup.find_all(attrs={"class": "js-geo-city"}))
# text
print(soup.find_all(text=re.compile("熱")))
# find() 用法和find_all()一致,只不過返回的是單個元素,匹配到的第一個
# 其他方法
find_parents() # 返回所有的祖先節點
find_parent() # 直接返回父節點
find_next_siblings() # 返回後面所有的兄弟節點
find_next_sibling() # 返回後面第一個兄弟節點
find_previous_siblings() # 返回前面所有的兄弟節點
find_pervious_sibling() # 返回前面第一個兄弟節點
# css選擇器 select()
print(soup.select("ul li"))