爬虫(八十九)用lxml库解析数据
目标:爬取湖南大学2018年本科招生章程
url:http://admi.hnu.edu.cn/info/1026/2993.htm
页面部分图片:
春季,四季之一。春,代表着温暖、生长。春季,阴阳之气开始转变,万物随阳气上升而萌牙生长,大地呈现春和景明之象。
使用工具:
Python3.7
火狐浏览器
PyCharm
0x01 打开浏览器的开发者工具查看页面元素
0x02 html代码如下:
第一章 总则
第一条 为保证学校本科生招生工作顺利进行,切实维护学校和考生的合法权益,根据《中华人民共和国教育法》、《中华人民共和国高等教育法》和教育部继续推进高校招生“阳光工程”的有关规定,按照教育部“依法治招”的要求,为贯彻落实公平竞争、公正选拔的原则,进一步规范学校招生工作,确保招生工作顺利进行,特制定本章程。
第二条 学校全称为湖南大学,部标代码为10532,英文名称为“Hunan University”。
第三条 湖南大学是一所直属中华人民共和国教育部的国有公办全日制普通高等学校,也是国家“双一流”建设高校。
第四条 学校位于全国历史文化名城湖南省省会长沙市,学校地址:湖南省长沙市岳麓山;分南校区、财院校区两个校区。邮政编码:410082。
第五条 学校普通本科层次的招生包括普通类、自主招生、国家专项计划、高校专项计划、保送生、高水平艺术团、高水平运动队、艺术类、内地西藏班、内地新疆高中班、少数民族预科班、新疆协作计划。
第六条 学校依据教育部颁布的本年度《教育部关于做好普通高校招生工作的通知》和《普通高等学校招生工作规定》,全面贯彻实施高校招生“阳光工程”,本着公平、公正、公开的原则,综合衡量考生的德智体美情况,择优选拔。
第二章 组织机构及其职责
第七条湖南大学招生工作领导小组是学校招生工作的领导机构,研究招生简章与章程的制定等重要事项。湖南大学招生与就业指导处是学校组织和实施本科招生工作的常设机构,负责本科招生的日常工作。学校充分发挥招生委员会在民主监督、决策咨询等方面的作用
第八条 学校纪委办(监察处)负责监督招生政策的贯彻落实以及招生录取的公开、公平、公正,维护学校和考生的合法权益。
第三章 招生专业及招生计划
第九条 学校根据优化生源结构、促进区域和城乡入学机会更加公平、保持数量基本稳定的原则,结合国家政策要求,统筹考虑各省考生人数、往年生源报考情况、就业市场需求与行业分布等因素,确定分省分专业来源计划。
第十条 学校招生与就业指导处将分省来源计划按要求及时报送到各有关省(自治区、直辖市)普通高校招生办公室备案,并通过相关渠道向社会公布。
第十一条 按照教育部的有关规定,将招生总计划的1%作为预留计划,用于平衡各省(自治区、直辖市)生源质量及解决同分考生的录取矛盾问题。
第四章 考试与考核
第十二条 湖南大学是经教育部批准面向全国招收高水平艺术团和高水平运动队的高校,学校组织高水平艺术团和高水平运动队项目测试。通过测试,确定入选资格考生名单,并报教育部和有关省(自治区、直辖市)的普通高校招生办公室备案。
0x03 打开PyCharm,新建一test1.py文件
导入requests模块和lxml库
此时可以运行项目,如果报错,说明没有安装模块。
import requests
from lxml import etree 0x04 定义url和headers
lxml提供如下方式输入文本:
url = 'http://admi.hnu.edu.cn/info/1026/2993.htm' # url:统一资源定位符=协议部分+网址+文件地址部分
headers = { # 请求头# 告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92'' Safari/537.36',
} 0x05 发送请求并解析HTML对象
可以使用find、findall或者xpath来搜索Element包含的标签对象。区别如下:
response = requests.get(url, headers=headers) # 请求获取获取html
html = etree.HTML(response.content.decode('utf-8')) # 解析对象 此外,lxml还支持css语法的选择方式,对于熟悉JQuery选择器的开发者是一个很好的补充(需要安装pip install cssselect):
0x06 解析HTML
6.据观察,每条数据都存在一个 标签内,所以决定创建一个列表,迭代出每个p标签的文本
从“第一章”的位置开始(此处为第一个p标签)
获取该标签的XPath:
XPath为:/html/body/div[4]/div/p[1]/strong[1] (文本是加粗的,被放在一个strong标签里)
可知,同级的其它所有p标签的XPath为:div[4]/p
0x07 获取所有p标签,返回一个列表
p = html.xpath("//div[4]/div/p") # 使用xpath定位到相应节点,返回一个列表dep = [] # 新建一个列表,用来存储每一条数据
for i in p:data = { # 数据字典''.join(i.xpath('.//strong//text()')), # join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。定位到strong标签(即为每个章节的头部)''.join(i.xpath('.//text()')) # text()方法为获取文本}print(data)dep.append(data) ,# 将数据字典添加到dep列表中 0x08 将dep列表存储在一个txt文件中
# 数据存储
with open('湖南大学招生章程.txt', 'w', encoding='utf-8') as f: # 使用with open()创建对象f,命名为湖南大学招生章程,格式为.txt,‘w’表示获得写权限,encoding为编码方式for i in dep:f.write(str(i)+'\n') # 调用write()方法写入 0x09 全部代码
import requests
from lxml import etreeurl = 'http://admi.hnu.edu.cn/info/1026/2993.htm' # url:统一资源定位符=协议部分+网址+文件地址部分
headers = { # 请求头# 告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92'' Safari/537.36',
}# 发送请求并解析HTML对象
response = requests.get(url, headers=headers) # 请求获取获取html
html = etree.HTML(response.content.decode('utf-8')) # 解析对象p = html.xpath("//div[4]/div/p") # 使用xpath定位到相应节点dep = []
for i in p:data = {''.join(i.xpath('.//strong//text()')), # join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。''.join(i.xpath('.//text()'))}print(data)dep.append(data)# 数据存储
with open('湖南大学招生章程.txt', 'w', encoding='utf-8') as f: # 使用with open()创建对象ffor i in dep:f.write(str(i)+'\n') 本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
