使用requests_html抓取数据
2024-09-05 20:45:21
from requests_html import HTMLSession
import json
class YejiCollege:
def __init__(self, url):
self.url = url
self.headers = {"User-Agent": ("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36")}
def get_response(self):
session = HTMLSession()
return session.get(self.url, headers=self.headers)
def filter_info(self):
html_data = self.get_response()
# 从第三个P标签开始,获取虚假大学数据
return html_data.html.find('div#data249708 p')[2:]
@staticmethod
def get_json(data):
info = {}
city = None
for line in data:
# 每个城市会显示为 <p><strong>北京:151所</strong></p>
if 'strong' in line.html:
# 拆分城市与虚假大学数量
city, total_college = line.text.split(':')
# 构造字典
info[city] = dict(total=total_college, data=[])
continue
info[city]['data'].append(line.text)
with open('colleges.json', 'w+', encoding='utf-8') as f:
# ensure_ascii默认为True,json.dump后会被转码...
f.write(json.dumps(info, ensure_ascii=False))
def run():
url = 'http://www.gaosan.com/gaokao/249708.html'
main = YejiCollege(url)
data = main.filter_info()
main.get_json(data)
if __name__ == '__main__':
run()
结果:
... ... ,
"陕西": {
"total": "16所",
"data": [
"西安电子信息学院",
"西安理工学院",
"西安工商学院",
"西安科技师范大学",
"西安信息技术学院",
"西安工商管理学院",
"西安工业科技技术学院",
"西安工业科技学院",
"陕西国防工业技术学院",
"陕西瀚林医科学院",
"西安工业工程学院",
"陕西工贸职业学院",
"西安科技职业学院",
"西安经济技术学院",
"西安机电工程学院",
"陕西科技管理学院"
]
},
"福建": {
"total": "5所",
"data": [
"厦门师范学院",
"福建海峡经贸技术学院",
"福建经济贸易大学",
"福建科技学院",
"福建省轻工业学院"
]
},
... ...
文章参考于微信公众号【清风Python】
最新文章
- Java集合分组
- __cdecl和__stdcall
- ACM: HDU 2563 统计问题-DFS+打表
- SendMessage
- 【现代程序设计】homework-06
- linux 多线程信号处理总结
- Android & Eclipse FAQ
- BASH内置变量
- .net web 开发平台- 表单设计器 一(web版)
- POJ 1007
- JAVA中线程的状态
- TP5 模型类和Db类的使用区别
- 接口测试---Python数据处理需要注意的细节
- echarts常用方法,饼图切换圆环中文字(三)
- Redis内存分析工具redis-rdb-tools
- 【字符串】ZSC-字符串编辑
- 【Hbase学习之五】HBase MapReduce
- 20145232 韩文浩 《Java程序设计》第3周学习总结
- 一款优秀的OA办公系统有哪些功能?
- bzoj1050 旅行
热门文章
- <;input>;/<;textarea>;输入框设置默认提示文字(隐藏式)
- ASE Alpha Sprint - backend scrum 9
- C# 错误配置页
- LINUX VSFTP配置及安装
- break语句、continue语句、goto语句的用法辨析
- dao层方法中的@Param说明
- 【leetcode】1026. Maximum Difference Between Node and Ancestor
- Primary Key Increase by Trigger
- 如何查看本机上安装的.NET Framework版本
- .Net Core 学习目录(搁置)