董小二2019

导航

Python-bs4

from bs4 import BeautifulSoup #引入包

使用方式:可以将一个html文档,转化为指定的对象,然后通过对象的方法或属性去查找指定的内容。

(1)转化本地文件:

  soup = BeautifulSoup(open('本地文件'),'lxml') #lxml是解析器

 

(2)转化网络文件:

  soup = BeautifulSoup('字符串类型或者字节类型','lxml')

实操:

#生成对象
soup = BeautifulSoup(open('soup_text.html',encoding='utf8),'lxml')

(1)根据标签名查找:

#查找对象里的a标签,这种方法只能找到第1个符合要求的标签
print(soup.a) 

(2)获取属性:

print(soup.a['href'])

print(soup.a['href'])
print(soup.a['title'])
print(soup.a['target'])

#打印a标签所有属性,并返回一个字典
print(soup.a.attrs)

(3)获取内容:

#打印a标签里的文本
print(soup.a.text)

print(soup.a.text)
print(soup.a.string)

print(soup.a.get_text())
三者的区别为:如果标签里还有标签,string获取结果为None,其他两个方法可以获取内容
(4)find
#找第1个符合要求的a
soup.find('a')
#查找title = 'qin' 的a标签
soup.find('a', title = 'qin')
#查找alt = 'qi' 的a标签
soup.find('a', alt = 'qi')
#注意,当用class查找时,格式为class_ ,因为class是关键字,无法直接使用
soup.find('a', class_ = 'abcd')
#先找到class = 'tang' 的div,再通过这个div找到class = 'du'的a标签,此时找到的a标签是这个div里的第1个a标签
div = soup.find('div', class_ = 'tang')
div.find('a', class_ = 'du')

(5)find_all

#查找所有的a标签,返回一个列表
list = soup.find_all('a')
#查找calss = 'tang' 的div 里面所有的a标签
div = soup.find('div' , class_ = 'tang')
div.find_all('a')
#查找calss = 'tang' 的div 里面所有的a标签和b标签
div = soup.find('div' , class_ = 'tang')
div.find_all([‘a’,'b'])
#查找calss = 'tang' 的div 里面前2个a标签
div = soup.find('div' , class_ = 'tang')
div.find_all('a', limit = 2)

 (6)select

根据选择器选择指定的内容:a 标签选择器,.dudu类选择器,#lala id选择器,a,.dudu #lala 组合选择器,

div .dudu #lala .meme 层级选择器,只要是子级就可以选择

div > p > a > .dudu 只能是儿子才能选择

#查找层级下面所有的a,返回1个列表
soup.select('.tang > ul > li > a')
#查找层级里下标为2的a标签
soup.select('.tang > ul > li > a')[2]
#查找层级里下标为2的a标签里的内容
soup.select('.tang > ul > li > a')[2].text
#查找层级里下标为2的a标签里的href属性
soup.select('.tang > ul > li > a')[2]['href']

 

 

 新手学习,如果错漏,望指正!!!

 

 

posted on 2019-10-05 10:27  董小二2019  阅读(243)  评论(0)    收藏  举报