使用beautifulsoup解析网页爬取的表格信息

 

我们爬取百度百科上一首歌的获奖记录表格:

格式如下:

想要成 2015年3月30日-东方风云榜-动感101年度金曲-《匆匆那年》 的统一格式,需要注意倒数两行的字段缺省情况。同样需要提取出缺省的字段。

借助beautiful soup解析并提取。

import re
from bs4 import BeautifulSoup


def load_file(filepath):

    soup = BeautifulSoup(open(filepath), "lxml")
    a = soup.tbody.children
    reg = re.compile(("<[^>]*>"))   # 清除html标签,提取文本
    row0 = []       # row0用于保存上一行的信息
    flag = True     # row0未初始化
    for child in a:
        row = []    # 保存表格提取结果
        if child.find('th'):    # 提取表格字段
            for value in child.children:
                st = reg.sub('', str(value))    # 正则匹配替换
                row.append((st.strip('\n')))
            row = '-'.join(row)
            print(row)
            continue
        if child.find('td'):    # 提取每一行
            while child.find('sup'):    # 先清洗可能存在的上标符号
                child.find('sup').extract()
            for value in child.children:
                st = reg.sub('', str(value))
                row.append(st.strip('\n'))
            if flag:
                flag = False
            if len(row) < len(row0):    # 与上一行比较,分析是否需要处理字段缺省的情况
                row_temp = row0[0:len(row0)-len(row)]
                for i in range(len(row)):
                    row_temp.append(row[i])
                row0 = row_temp
                row_temp = '-'.join(row_temp)   # 将列表保存的字段连接起来
                print(row_temp)
                continue
            row0 = row
            row = '-'.join(row)
            print(row)

if __name__ == '__main__':
    load_file('data/2333.txt')

效果如下:

一个参考:

表格解析

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值