Beautifulsoup入门笔记(一)

2017-10-16  本文已影响0人  Cytosine
bsObj.findAll()

BeautifulSoup库里的对象

处理

处理子标签和其他后代标签

from urllib.request import urlopen
from bs4 import BeautifulSoup

def main():
    html = urlopen('http://www.pythonscraping.com/pages/page3.html')
    bsObj = BeautifulSoup(html, 'lxml')

    for child in bsObj.find('table', {'id':'giftList'}).children:
        print(child)

if __name__ == '__main__':
    main()

处理兄弟标签

对象不能把自己作为兄弟标签。任何时候你获取一个标签的兄
弟标签,都不会包含这个标签本身。其次,这个函数只调用后面的兄弟标签。例如,如果我们选择一组标签中位于中间位置的一个标签,然后用 next_siblings() 函数,那么它就只会返回在它后面的兄弟标签。

如果想让你的爬虫更稳定,最好还是让
标签的选择更加具体。如果有属性,就利用标签的属性。

获取标签属性

myTag.attrs 返回一个字典,所以myImgTag.attrs['src']获取图片资源位置

Lambda

BeautifulSoup 允许我们把特定函数类型当作 findAll 函数的参数。唯一的限制条件是这些
函数必须把一个标签作为参数且返回结果是布尔类型。BeautifulSoup 用这个函数来评估它
遇到的每个标签对象,最后把评估结果为“真”的标签保留,把其他标签剔除。
例如,下面的代码就是获取有两个属性的标签:

soup.findAll(lambda tag: len(tag.attrs) == 2)

这行代码会找出下面的标签:

<div class="body" id="content"></div> 
<span style="color:red" class="title"></span>

如果你愿意多写一点儿代码,那么在 BeautifulSoup 里用 Lambda 表达式选择标签,将是正则表达式的完美替代方案。
(摘自《Python网络数据采集》)

其他库

上一篇下一篇

猜你喜欢

热点阅读