Python静态网页解析库Bequtifulsoup4

来源:互联网 发布:mac怎么删除硬盘文件 编辑:程序博客网 时间:2024/06/05 00:52

Beautifulsoup4是用于解析html文本的Python库,官方指南参考
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

find,
select方法:用CSS定位器查找html元素

# coding:utf-8import requestsfrom bs4 import BeautifulSoup  #静态网页解析#下述定义几个全局变量BASE_LIB = 'html5lib'BASE_URL = 'http://www.ip138.com'UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'HEADERS = {'user-agent':UA}def handle_zip_code(province, url):    print(province)    resp = requests.get(url, headers=HEADERS)    text = resp.text.encode('iso-8859-1').decode('gbk')    bs = BeautifulSoup(text, BASE_LIB)    rows = bs.select('table.t12 > tbody > tr')     #查找bs4解析后的html源码中表格的前13行tr(对照网页图看)    print('_______________________________')    #下述循环可以用数组切片替代,去掉表格第一行    for i in range(1, len(rows)):        items = rows[i].select('td')         #每一"行"的每个单元网格td取出,形成items         t_1 = items[0].text.strip()         #把表格每一行的第一个"元素"取出(市、县、区名),strip是去掉字符首尾空格        if t_1:            print('\t%s, %s' % (t_1, items[1].text.strip()))        if len(items) > 4:        #数据有两大列,有些网格右侧没有信息(比如滨海新区右侧没有别的区县)            t_2 = items[3].text.strip()            if t_2:                print('\t%s, %s' % (t_2, items[4].text.strip()))if __name__ == '__main__':    resp = requests.get(BASE_URL + '/post', headers=HEADERS)    text = resp.text.encode('iso-8859-1').decode('gbk')      #获得页面http://www.ip138/post.com文本内容    bs = BeautifulSoup(text, BASE_LIB)    #初始化一个bs4对象;默认使用lxml对html做解析,这里设置参数BASE_LIB是选择用'html5lib'对html做解析    for item in bs.select('div#newAlexa > table.t4 > tbody > tr > td > a'):        #bs4的select返回所有满足条件的元素,结构是数组,只有一个元素时也返回数组        #select参数是html的查找层次,可以对照网页开发者工具里html代码查看对应关系        print(item.text) #查找到的各个省市名字,a元素        print(item.text, item.get('href'))        #查找a元素的href属性,即URL尾巴上的各省市编号(参看网页html源码)        print('_______________________________')        handle_zip_code(item.text, BASE_URL + item.get('href'))        #BASE_URL + item.get('href')是拼接每个省市完整的URL

这里写图片描述

这里写图片描述

原创粉丝点击