您的位置:首页 > 编程语言 > Python开发

Python静态网页解析库Bequtifulsoup4

2017-10-11 14:59 537 查看
Beautifulsoup4是用于解析html文本的Python库,官方指南参考

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

find,

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

# coding:utf-8

import requests
from 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




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: