zoukankan      html  css  js  c++  java
  • 读BeautifulSoup官方文档之与bs有关的对象和属性(1)

    自从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'
  • 相关阅读:
    5.集合(3)——Map集合
    4.集合(3)——List集合
    2.初窥集合类1
    1.正则表达式1
    (13)JSON
    (12)表单验证
    Wpf实现TreeSelect多选
    Wpf实现TreeSelect
    Wpf登录验证方式(5)-推理拼图的实现
    Wpf登录验证方式(4)-语序点选的实现
  • 原文地址:https://www.cnblogs.com/nzhl/p/5589548.html
Copyright © 2011-2022 走看看