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】

最新文章

  1. Java集合分组
  2. __cdecl和__stdcall
  3. ACM: HDU 2563 统计问题-DFS+打表
  4. SendMessage
  5. 【现代程序设计】homework-06
  6. linux 多线程信号处理总结
  7. Android & Eclipse FAQ
  8. BASH内置变量
  9. .net web 开发平台- 表单设计器 一(web版)
  10. POJ 1007
  11. JAVA中线程的状态
  12. TP5 模型类和Db类的使用区别
  13. 接口测试---Python数据处理需要注意的细节
  14. echarts常用方法,饼图切换圆环中文字(三)
  15. Redis内存分析工具redis-rdb-tools
  16. 【字符串】ZSC-字符串编辑
  17. 【Hbase学习之五】HBase MapReduce
  18. 20145232 韩文浩 《Java程序设计》第3周学习总结
  19. 一款优秀的OA办公系统有哪些功能?
  20. bzoj1050 旅行

热门文章

  1. &lt;input&gt;/&lt;textarea&gt;输入框设置默认提示文字(隐藏式)
  2. ASE Alpha Sprint - backend scrum 9
  3. C# 错误配置页
  4. LINUX VSFTP配置及安装
  5. break语句、continue语句、goto语句的用法辨析
  6. dao层方法中的@Param说明
  7. 【leetcode】1026. Maximum Difference Between Node and Ancestor
  8. Primary Key Increase by Trigger
  9. 如何查看本机上安装的.NET Framework版本
  10. .Net Core 学习目录(搁置)