python爬虫基于bs4的查找select和find

最近在学习爬虫的时候,发现之前学的总是会忘记,虽然在网上保存了查询的资料的书签,但是感觉还是不够直观,总还是需要再在网上查询,所以,现在打算在CSND上写一下平时的一些笔记,很多应该会从查到的资料粘贴过来,无其他用途,仅仅自己做笔记而已。

  • bs4的select查找

类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list
(1)通过标签名查找

print soup.select('title') 
#[<title>The Dormouse's story</title>]

(2)组合查找

组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开

print soup.select('p #link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

直接子标签查找

print soup.select("head > title")
#[<title>The Dormouse's story</title>]

(5)属性查找

查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。

print soup.select("head > title")
#[<title>The Dormouse's story</title>]
 
print soup.select('a[href="http://example.com/elsie"]')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

同样,属性仍然可以与上述查找方式组合,不在同一节点的空格隔开,同一节点的不加空格

print soup.select('p a[href="http://example.com/elsie"]')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
  • bs4 find_all查找
 findAll(tag,attributes,recursive,text,limit,keywords)

tag:索要筛选的标签

attributes:标签的特征值,是用Python字典封装的一个标签的若干属性和对应的属性值

recursive:布尔型变量,是否递归,默认为True

text:文本参数,用标签的文本内容去匹配

#找到所有的含有the prince的标签

namelist=bsObj.findAll(text="the prince")
print(len(namelist))

limit:范围限制参数,find函数即为limit参数值为1,限制寻找次数

keywords:选择具有指定属性的标签

alltext=bsObj.findAll(id="text")
print(alltext[0].get_text())

注意:keywords参数是个冗余的参数,其可以被attributes等价代替

如下面两段代码是完全一样的

bsObj.findAll(id="text")
 
bsObj.findAll("",{
    
    "id":"text"})

另外提一点,不一定要一次性查找完全,可以先把其中的小部分提取出来,再从这小部分里面再提取自己想要的内容

  • 如何用bs4拿到标签里面的文字
    值得注意的是,无论使用select还是find_all,返回的都是一个列表,所以当我们想要拿出其中的字符串的时候,别忘了加上索引,然后可以用.string方法拿到字符串
 dls[0].select('strong')[0].string

猜你喜欢

转载自blog.csdn.net/weixin_45774350/article/details/108919242