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元素
![](https://img-blog.csdn.net/20171011161501754?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3lteTAwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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
相关文章推荐
- python + lxml 解析静态网页
- Python豆瓣静态网页抓取,lxml解析和显示(实验)
- 用Python做网页抓取与解析入门笔记
- Python实现抓取网页并且解析的实例
- 网页解析利器goose的python3版本安装与测试
- 全自动静态网页生成器之 缘起及html文件解析
- Tomcat不解析静态网页的解决方案
- python网页解析器--BeautifulSoup
- Python解析网页源代码中的115网盘链接实例
- Python写爬虫——抓取网页并解析HTML
- 使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies
- python解析网页中javascript动态添加的内容(一)
- 利用Python抓取和解析网页(下)
- 黄聪:使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)
- python爬虫:不需要登录静态网页抓取
- 使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)
- 黄聪:使用Python中的urlparse、urllib抓取和解析网页(一)
- 利用Python抓取和解析网页(1)
- 利用Python抓取和解析网页(一)
- python爬虫解析网页编码问题