自从10号又是5天没更, 是, 我再一次断更... 原因是朋友在搞python, 老问我问题, 我python也是很久没碰了, 于是为了解决他的问题, 我只能重新开始研究python, 为了快速找回感觉, 我先是看了<简明python教程>, 出于兴趣考虑又开始看一本叫做<Web Scraping with Python>, 结果一发不可收拾, 直接把我的csapp扔在了一边, 真是太 ** 有意思了...

其中有几个很重要的库, 为了实行我的爬虫学习大计, 我准备先看BeautifulSoup的官方文档... 所以接下来就是关于BeautifulSoup官方文档的笔记 :

首先要知道BeautifulSoup是一个关于html解析(当然也有xml)的第三方库, 它能把html文件解析成为一棵树, 并且提供了很多强大的函数来帮助我们搜索其中的tags. 解析html所需要的解析库有这么几种 ...

 

官方建议lxml, 速度很快...

 

首先如何来生成一个BeautifulSoup的对象呢? 

1 from bs4 import BeautifulSoup
2 
3 soup = BeautifulSoup(open("index.html"))
4 
5 soup = BeautifulSoup("<html>data</html>")

你可以传入字符串(str和bytes)或者是filehandle... 首先它将你输入的文档转为Unicode, 接着开始用指定的parser进行解析, 当然如果你不指定parser的话默认使用html.parser,

 

上面已经说了其实本质上生成的BeautifulSoup对象是一棵树, 其实总共只需要了解四个对象 ( TagNavigableStringBeautifulSoup, and Comment).

Tag : 

学过html的话, tag就是html里面的tag... 下面是tag的一些属性和方法 :

 

name : 比如超链接的tag.name就是a, <a href="..."></a>, 另外有一点值得注意的是, 我们可以改动tag.name, 这将反应在所有由该个BeautifulSoup生成的html中.

1 tag.name = "blockquote"
2 tag
3 # <blockquote class="boldest">Extremely bold</blockquote>

 

attrs : tag里面有很多attributes(比如name例子中tag a 里面有个attribute是href), 在这里是以字典的形式出现的. 你可以自由的访问或者修改甚至删除它们.

 1 tag.attrs
 2 # {u'class': u'boldest'}
 3 
 4 tag['class'] = 'verybold'
 5 tag['id'] = 1
 6 tag
 7 # <blockquote class="verybold" id="1">Extremely bold</blockquote>
 8 
 9 del tag['class']
10 del tag['id']
11 tag
12 # <blockquote>Extremely bold</blockquote>
13 
14 tag['class']
15 # KeyError: 'class'
16 print(tag.get('class'))
17 # None

当然我们还可能碰到一些有多个值的属性, 在这里是以list的形式出现的, 同时只有符合标准的属性能出现多个值, 对于不符合标准的属性即使出现多个值也当做一个值处理, 同时XML不支持多值属性...

 1 css_soup = BeautifulSoup('<p class="body strikeout"></p>')
 2 css_soup.p['class']
 3 # ["body", "strikeout"]
 4 
 5 css_soup = BeautifulSoup('<p class="body"></p>')
 6 css_soup.p['class']
 7 # ["body"]
 8 
 9 id_soup = BeautifulSoup('<p id="my id"></p>')
10 id_soup.p['id']
11 # 'my id'
12 
13 rel_soup = BeautifulSoup('<p>Back to the <a rel="index">homepage</a></p>')
14 rel_soup.a['rel']
15 # ['index']
16 rel_soup.a['rel'] = ['index', 'contents']
17 print(rel_soup.p)
18 # <p>Back to the <a rel="index contents">homepage</a></p>
19 
20 xml_soup = BeautifulSoup('<p class="body strikeout"></p>', 'xml')
21 xml_soup.p['class']
22 # u'body strikeout'

 

posted on 2016-06-16 00:26  内脏坏了  阅读(441)  评论(0编辑  收藏  举报