MOOC-Python网络爬虫与信息提取-第二周 BeautifulSoup库入门与信息提取方法


一、BeautifulSoup库入门


1、BeautifulSoup库的导入

用以下代码导入 BeautifulSoup 库,注意 BeautifulSoup 的 B 和 S 要大写:

from bs4 import BeautifulSoup


2、常用的BeautifulSoup解析器:

解释器使用方法条件
htmlBeautifulSoup(MK,‘html.parser’)bs4库
lxmlBeautifulSoup(MK,‘lxml’)lxml库
xmlBeautifulSoup(MK,‘xml’)lxml库
html5libBeautifulSoup(MK,‘html5lib’)html5lib库


3、BeautifulSoup 类的基本元素

基本元素说明
tag标签
name标签的名字,<p……</p>的名字即为p
attributes标签的属性,  <tag>.name
NavigableString标签内非属性字符串,   <tag>.string
Comment标签内字符串的注释部分



元素所对应的部分:


标签树的下行遍历:

.contents          子节点列表    

.children           子节点迭代

.descendants  子孙节点迭代


标签树的上行遍历:

.parent

.parents


标签树的平行遍历:(注意平行遍历必须发生在同一个父节点下)

next_sibling    下一个平行节点

previous——sibling   上一个平行节点

next_siblings    下一个平行节点迭代

previous——siblings   上一个平行节点迭代



4、基于bs4的html编码与现实

prettify() 方法:可以让html页面分行显示,自动加入换行符。


二、信息标记与提取

1、常见的信息标记形式:

XML 标签化语言                       Internet数据传输

JSON 键值对(有类型)          移动应用云端与节点的数据通讯,无注释

YMAL 键值对(无类型)         系统配置文件,有注释


1、常见的信息标记提取:

1、形式解析:例如用解析器遍历标签树

2、直接搜索:<>.find_all()   <>.find等方法

soup.find_all(string = "Hello world")


import re
soup.find_all(string = re.compile("hello world"))

因为太常用,所以存在简写形式:

<tag>(…)   可以代表 <tag>.find_all(…)

soup(…)   可以代表 soup.find_all(…)

同时存在以下扩展方法:



实例代码:

import requests
from bs4 import BeautifulSoup
import bs4


def getHTMLText(url):
    try:
        r = requests.get(url, timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[2].string])


def printUnivList(ulist, num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名", "学校名称", "总分", chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2], chr(12288)))

def main():
    uinfo = []
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)


main()



特别的,如下

{1:{3}^10}
这里的 {3} 指的是用format后面的第三号位 chr(12288) 中文空格符来填充,保证了最后打印的格式可以居中对齐

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值