css选择器

css选择器组成

规则由两部分组成:选择器以及一条或多条声明。
主要讲选择器的相关用法(这在爬虫时候足够用了)
这个讲解主要是用在bs4中的css选择器;至于pyquery可以看这个

元素选择器

选取html中的元素,如p,div;
.select('p')
实例

soup = BeautifulSoup(html_sourse,'lxml')
element = soup.select('p')
print(element,type(element)) # <class 'bs4.element.ResultSet'>

类选择器

.class;div.class
实例

#  <class 'bs4.element.ResultSet'>
lei = soup.select('.ir___QwEG') # 这样所选的话并不会把含有该类的标签打印出来,就是不打印div标签,下方打印
print('选取所有该类的元素',lei,type(lei))
div_lei = soup.select('div.ir___QwEG') # 中间不用空行
print('选取所有该类的元素',div_lei,type(div_lei)) # <class 'bs4.element.ResultSet'>

ID选择器

与类选择器不同之处在于ID选择器是以"#"开头

select_id = soup.select('#backtop')
select_a_id = soup.select('a#backtop')
print(select_id,type(select_id)) # <class 'bs4.element.ResultSet'>
print(select_a_id,type(select_a_id)) # <class 'bs4.element.ResultSet'>

属性选择器

如果希望选择有某个属性的元素,则可以使用属性选择器,不仅局限于id和class属性。
如:target属性

# 报错,貌似bs4中的select无法使用css3新增的属性选择器
# TypeError: select() missing 1 required positional argument: 'selector'
select_attr = soup.select(target="_blank") # 选择所有含有target属性的元素
# select_attr_val = soup.select('target="_blank"') # 选择所有含有target="_blank"的元素

既然无法用,那就讲解下,属性选择器符号的运用(target是html标签中的属性,同理也可为其他属性)

[target~="_blank"]选择属性target包含 _blank的元素
[target^="_blank"]选择属性target以 _blank开头的元素
a[target] 选择所有含有target属性的a的元素

后代选择器;采用空格

element_houdai = soup.select('p input')# 选择所有p元素下的所有input元素
print(element_houdai,type(element_houdai)) # <class 'bs4.element.ResultSet'> 

子元素选择器;采用大于号 >

element_son = soup.select('p>input') # 选择所有p元素下的所有input子元素
print(element_son,type(element_son))  # <class 'bs4.element.ResultSet'> 

相邻兄弟选择器;采用加号 +

element_brother = soup.select('p+a') # 选择紧跟在p元素后面的所有兄弟a元素
print(element_brother,type(element_brother)) # <class 'bs4.element.ResultSet'> 

按效果实现来说后代选择器和子元素选择器很像

bs4一般一开始的使用

bs4创建<class 'bs4.BeautifulSoup'>对象的方法

from bs4 import BeautifulSoup
f = open('test.html','r',encoding='utf-8')
html_sourse = f.read()
f.close()
# 直接通过字符串进行创建
soup = BeautifulSoup(html_sourse,'lxml')

# 通过打开文件来创建
soup1 = BeautifulSoup(open('test.html',encoding='utf-8'))
print(soup1.prettify())
print(type(soup),type(soup1)) # <class 'bs4.BeautifulSoup'> <class 'bs4.BeautifulSoup'>

bs4的其他资料https://www.cnblogs.com/wkhzwmr/p/15230635.html

原文地址:https://www.cnblogs.com/wkhzwmr/p/15680201.html