最近在学习爬虫的时候,发现之前学的总是会忘记,虽然在网上保存了查询的资料的书签,但是感觉还是不够直观,总还是需要再在网上查询,所以,现在打算在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