[python]爬虫:熟练掌握beautifulsoup

Beautifulsoup处理的对象种类:
首先用其解析文件:
soup = BeautifulSoup(open(‘index.html’))
1.tag:
例如<title>The Dormouse’s story</title>中的title就是tag 的对象
如果想要提取title里面的字符串:
print soup.title
通过这种方式找到的是第一个符合要求的标记
也可以修改这个标签:
soup.title.name = ‘mytitle’
这样的话那一段字符便可以被修改成为<mytitle>The Dormouse’s story</mytitle>
tag当然有他的属性,如<p class=”title”><b>abcdefg</b></p>,有一个class属性,它的值为title,类似于字典的标签

soup.p[‘class’]

soup.p.get(‘class’)

的输出结果都是[‘title’]

soup.p.attrs

输出的是

{‘class’:[‘title’]}

当然我们也可以对它进行修改:

soup.p[‘class’] = ‘myclass’

2.NavigableString

我们可以通过加.string的方式来获得标签内部的内容:

soup.p.string

就打印出的是abcdefg,也可以通过unicode()函数将其转化为Unicode字符串

3.beautifulsoup:

beautifulsoup就是整个代码本身,代指的就是这里的soup

4.comment

comment是文档的注释部分 如

<a>

<!–Elsie–>

</a>

我们照样可以通过soup.a.string访问这里的Elsie,打印出来的结果和普通内容没有什么两样,需要通过type(soup.a.string)来判断是否是注释,如果是,打印出来的结果是bs4.element.Comment

遍历文档树

1.子节点

tag.content可以将tag子节点以列表的方式输出而tag.children是一个循环生成器,可以对子节点进行循环:

for child in soup.head.children:

print(child)

但是这只包含其下级,而不包含下级的下级的下级,需要用.descendants作递归循环,而当tag内容唯一时(只有一个tag)可以用.string直接读取里面的内容,而,strings则可以遍历所有tag里面的的字符串,需要用循环语句调用,而.stirpped_strings可以去掉字符串里面包含的空格

2.父节点

可以用.parent来获得父节点,用.parents来遍历所有的父节点

3.兄弟节点

同理有.next_sibling(s) 和.prev_sibling(s)分别调用之前之后的兄弟节点

4.前后节点

.next_element(s), .previous_element(s)则不分父节点子节点前后调用

搜索文档树:

基本函数: find_all(name, attrs, recursive, text, **kwargs)

name:可以找到所有名字为name的标记而忽略字符串,可以用正则表达式

kwargs则是每一个标志的参数如查找有id属性的标志:

soup.find_all(id=True)

class为sister的参数:

soup.find_all(class_=’sister’)

text:可以用来搜索每个标签下的字符串

limit参数,soup.find_all(‘a’, limit=2)最多找打两个符合条件的结果

当recursive = False 时,只会搜索当前tag的子节点,而不会遍历子孙节点

One thought on “[python]爬虫:熟练掌握beautifulsoup

Leave a Reply

Your email address will not be published. Required fields are marked *