1-css常用选择器介绍
select方法:
有时使用css选择器的方式可以更加的方便。使用css选择器的语法,应该使用select方法。在BeautifulSoup中,要使用css选择器,那么应该使用“soup.select()”方法,应该传递一个css选择器的字符串给select方法
以下列出几种常用的css选择器方法:
1)通过标签名查找:
print(soup.select("a"))
2) 通过类名查找:
通过类名,则应该在类的前面加一个“.”。比如查找class-sister的标签。示例代码如下:
print(soup.select(".sister"))
3) 通过id查找:
通过id查找,应该在id的名字前面加一个“#”。示例代码如下:
print(soup.select("#link1"))
4)组合查找:
组合查找即和写class文件时,标签名与类名,id名进行组合的原理是一样的,例如查找p标签中,id等于link1的内容,二者需要用空格分开:
print(soup.select("p #link1"))
直接子标签查找,则使用>分隔:
print(soup.select("head > title"))
5)通过属性查找:
查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则无法匹配到。示例代码如下:
print(soup.select("a[href='http://example.com/elsie']"))
6)获取内容:
以上的select方法返回的结果都是列表的形式,可以遍历形式输出,然后用get_text()方法来获取它的内容。
soup = BeautifulSoup(html, 'html')
print(tipe(soup.select('title')))
print(soup.select('title')[0].get_text())
for title in soup.select('title'):
pirnt(title.get_text())
2-select和css选择器提取元素
# 需求:
# 1.获取所有tr标签
# 2.获取第2个tr标签
# 3.获取所有class等于even的标签
# 4.获取所有id等于test,class也等于test的a标签提取出来
# 5.获取所有a标签的href属性
# 6.获取所有职位信息(纯文本)
from bs4 import BeautifulSoup
# html = 'tencent.html'
soup = BeautifulSoup(html, 'lxml')
# 1.获取所有tr标签
trs = soup.select('tr')
for tr in trs:
print(tr)
# 2.获取第2个tr标签
trs = soup.select('tr')[1]
for tr in trs:
print(tr)
# 3.获取所有class等于even的标签
# trs = soup.select('tr.even')
# trs = soup.select("tr[class='even'")
for tr in trs:
print(tr)
# 4.获取所有id等于test,class也等于test的a标签提取出来
# 在css中实现不了
# 5.获取所有a标签的href属性
# css不能完全解决
aList = soup.select('a')
for a in aList:
href = a['href']
print(href)
# 6.获取所有职位信息(纯文本)
# css不能完全解决
trs = soup.select('tr')
for tr in trs:
infos = list(tr.stripped_strings)
print(infos)