beautifulsoup的学习给我的感受学习一个新的模块就是一定要去看官方文档,网上的文档只是摘抄,加上自己的一些理解(包括这篇,:)),详尽和准确度都不如官方文档;另外还要对模块的背景知识最好有一些了解,如果你不熟悉html的一些基本知识,看官方文档会看得稀里糊涂,没有理解的那么好。
html基本知识:html的标签、标签的属性、标签的属性class
类似<b></b>(中间的内容是粗体)、<h1></h1>(标题1格式)等,每种标签都有不同的意思,例如前面两个例子代表的就是括号中的显示样式 ,标签可以嵌套。标签括起来的整个东西叫做元素,例如:
<h1>this is a headline</h1>
就是一个元素。
标签的属性一个例子请看这里,表示这个标签的一些补充“信息”,比如<a><\a>表示这是一个链接,但是你要给出链接地址你就要把链接赋给href这个属性:
<a href="ri.htm" class="whitewine">雷司令(Riesling)</a>
标签的其中一个经常见到属性class可以对标签进行分类,比如你可以对多个标签都设置为class=“AAA”,然后再设置class=“AAA”的显示为红色的之类的,这样子就方便归类和整体改变属性。更加详细看这里beautifulsoup中的tag类型,这个跟html里面的标签是对应的。
tag的两个重要属性:
name,举个例子这个标签<a><\a>的name属性就是a
Attributes,属性,跟上面说的属性一样,获得属性的方法与字典相同,例如tag['class']
如果是这样子tag.attrs操作会以字典的形式得到所有的属性,就像这个{u'class': u'boldest'}find_all函数
下面这段完全可以在beautifulsoup官方文档中找到,这里只是复述。
def find_all(self, name=None, attrs={}, recursive=True, text=None,
limit=None, **kwargs):
参数1——name,这个name对应的是标签的名字,搜索 name
参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True,具体如下所示:
1.第一个参数是标签的名字,soup.find_all('b')找出所有的<b>标签
2.还可以用正则表达式
下面例子找出所有以b开头的标签,而不仅仅是<b>标签
import re
for tag in soup.find_all(re.compile("^b")):
print(tag.name)
3.若传入的是列表,则找出列表每个元素的标签
4.若传入的是True,则找出所有的标签,没有去重。
5.你还可以自己传入一个方法来自定义查找
参数2——attrs,搜索属性的时候可以用id="link2"之类的,也可以用类似于这样的:attrs={"data-foo": "value"}
参数3——string,参数可以搜搜文档中的字符串内容.
其他参数及其简写方式见官方文档。
获取某个属性的内容obj['class']等
获取标签名字obj.name
获取标签内容obj.get_text()
- 各种html的标签的意思
<li><\li>:list item,也就是列表项