爬虫新宠requests_html 带你甄别2019虚假大学 #华为云·寻找黑马程序员#

时间:2022-09-09 21:55:20

python模块学习建议

学习python模块,给大家个我自己不专业的建议:

  1. 养成习惯,遇到一个模块,先去github上看看开发者们关于它的说明,而不是直接百度看别人写了什么东西。也许后者可以让你很快入门,可那样你更多的是在吃别人剩下的。而访问Github,你可以在里面获取到更多作者想告诉你的内容和相关的链接地址。怎么评估一个模块好不好,最简单的办法就是看star,requests_html的star:9794,已经算很高的了。requests_html的Git地址:https://github.com/kennethreitz/requests-html。作者提供了官网http://html.python-requests.org/,用于更详细的使用描述。
  2. python模块下载,多数情况大家使用pip install xxxx轻松搞定。但请记住这个网址:https://pypi.org/。在你下载模块前,先去搜索下它,看看pypi给你什么提示与要求。就比如requests_html,官方明确说明了,最新版本的requests-html 0.10.0 Requires: Python >=3.6.0。而支持3.5的最后一个版本是pip install requests-html==0.6.6

requests-html学习

安装

python3.6+ pip install requests-html

python3.5 pip install requests-html==0.6.6

再强调一次,requests_html仅支持3.5+,且最新版本的requests_html仅支持3.6+ ,3.5的最后一个版本为0.6.6。

安装时,你会发现,requests-html依赖了很多其他模块,统一封装后,让开发变得更加无脑:

Successfully installed appdirs-1.4.3 bs4-0.0.1 certifi-2019.3.9 chardet-3.0.4

cssselect-1.0.3 fake-useragent-0.1.11 idna-2.8 lxml-4.3.3 parse-1.12.0

pyee-6.0.0 pyppeteer-0.0.25 pyquery-1.4.0 requests-2.22.0 requests-html-0.10.0

six-1.12.0 tqdm-4.32.1 w3lib-1.20.0 websockets-7.0

官网介绍

全面支持解析JavaScript!

CSS 选择器 (jQuery风格, 感谢PyQuery).

XPath 选择器, for the faint at heart.

自定义user-agent (就像一个真正的web浏览器).

自动追踪重定向.

连接池与cookie持久化.

令人欣喜的请求体验,魔法般的解析页面.

举几个毛栗子

下面举几个官网的栗子,内容来自:http://html.python-requests.org/

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://www.baidu.com/')
  • 获取网页内容

print(r.html.html)

  • 获取链接

print(r.html.links)

print(r.html.absolute_links)

links和absolute_links两个属性分别返回HTML对象所包含的所有链接和绝对链接(均不包含锚点)

  • 通过CSS选择器获取元素

r.html.find([selector],[first=True])

selector选择器,使用jQuery风格。如果不熟悉,给你个jQuery的官网传送门:https://api.jquery.com/category/selectors/

添加first=True则为find ,不添加则为findAll,简洁明了…

但需要注意,如果没有添加first=True,即便返回一个元素,结果也将是list类型

  • 通过xpath获取元素

r.html.xpath(’//*[@id=“su”]’, first=True) # 获取百度一下按钮地址…

  • 元素具体内容
# 获取网站html内容
r.html.html
# 获取网站文本内容
r.html.text
# 上面俩内容太多就不打印了...
# 获取元素的属性
print(r.html.xpath('//*[@id="su"]', first=True).attrs)
output:
{'class': ('bg', 's_btn'), 'id': 'su', 'type': 'submit', 'value': '百度一下'}
  • JavaScript支持

requests_html的js执行是亮点,但是毁在了默认安装上…

r.html.render() 首次执行该方法是,模块会检查依赖,并下载chromium,chromium是什么鬼,看起来很像chrome?

搞过selenium的应该知道,这里简单对比下chrome和chromium:

Chromium是谷歌的开源项目,开发者们可以共同去改进它,然后谷歌会收集改进后的Chromium并发布改进后安装包。Chrome不是开源项目,谷歌会把Chromium的东西更新到Chrome中。你也可以这么理解Chromium是体验版,Chrome是正式版;

Chromium不用安装,下载下来的是压缩包,解压后直接就可以使用。Chrome需要安装;

Chromium功能比Chrome多,因为新功能都是先在Chromium中使用,等完善后才添加到Chrome中。相对的Chrome就要比Chromium稳定很多不容易出错;

Chromium不开放自动更新功能,所以用户需手动下载更新,而Chrome则可自动连上Google的服务器更新,但新版的推出很慢。

但是,模块在安装的时候由于SSLCertVerificationError问题,没办法进行自动化安装:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=‘storage.googleapis.com’, port=443): Max retries exceeded with url: /chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)’)))

好在模块给出了地址,拼接host和uri即可进行下载:

http://storage.googleapis.com//chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip

我家里下载好慢,这点就不演示了,大家对这官网扭一扭吧…

requests-html示例

到了今天今天的重点了,使用requests-html获取2019中国虚假大学!

“虚假大学”是未在教育部备案,不具备招生资格、没有办学资质、涉嫌非法招生和网络诈骗的“虚假大学”。

这些虚假大学数据统计,来源于人民日报。其中还闹过一个笑话,一个网站转载人民日报的这条新闻时,误将中国邮电大学写成了北京邮电大学,结果北邮发飙要求该媒体即刻修改并致歉!然后,人民日报表示躺着也中枪.为人民日报献上一首白智英的***像中枪一样***。

好了不发散回正题,为了演示requests-html示例,找到了这个网站:

高三网:http://www.gaosan.com/gaokao/249708.html

网站以文本的格式,列出了392所虚假大学名单!那么,我们就用requests-html,获取一下它的数据,让你们看看requests-html有多简单!

分析下下网站结构,清楚明白,数据包裹在<div id="data249708">内部,从第三个p标签开始为我们所需要的数据。

代码实现:

# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/6/27 1:28
# @Software : PyCharm
# @version :Python 3.7.3
# @File : PseudoCollege.py from requests_html import HTMLSession
import json class PseudoCollege:
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 = PseudoCollege(url)
data = main.filter_info()
main.get_json(data) if __name__ == '__main__':
run()

叫College感觉有点讽刺…最终将这些学校保存至colleges.json的文本中,我看看结果片段:

  ... ... ,
"陕西": {
"total": "16所",
"data": [
"西安电子信息学院",
"西安理工学院",
"西安工商学院",
"西安科技师范大学",
"西安信息技术学院",
"西安工商管理学院",
"西安工业科技技术学院",
"西安工业科技学院",
"陕西国防工业技术学院",
"陕西瀚林医科学院",
"西安工业工程学院",
"陕西工贸职业学院",
"西安科技职业学院",
"西安经济技术学院",
"西安机电工程学院",
"陕西科技管理学院"
]
},
"福建": {
"total": "5所",
"data": [
"厦门师范学院",
"福建海峡经贸技术学院",
"福建经济贸易大学",
"福建科技学院",
"福建省轻工业学院"
]
},
... ...

The End

一个不留神又搞到二半夜了,哎…

快将这392所虚假大学名单,传播给你身边有孩子高考的朋友吧。

OK,今天的内容就到这里,如果觉得有帮助,欢迎将文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

来源:华为云社区征文 作者:清风Python

爬虫新宠requests_html 带你甄别2019虚假大学 #华为云·寻找黑马程序员#的更多相关文章

  1. 2019年最新超级有趣好玩的html&plus;css网页布局课程&comma;前端入门基础&comma;html5&plus;css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  2. 2019年5月22日 AY 程序员调侃语录

    我是AY,杨洋,做wpf开发的,最近得了一种病,程序员患得患失综合征.同事说,我年纪在变大,技术跟不上.业余之间,我原创了写了一些语录,给大家中午休息,累疲惫的时候,开心放松下. 1.活着的每一天都无 ...

  3. 2019年5月23日 AY 程序员调侃语录

    我是AY,杨洋,做wpf开发的,最近得了一种病,程序员患得患失综合征.同事说,我年纪在变大,技术跟不上.业余之间,我原创了写了一些语录,给大家中午休息,累疲惫的时候,开心放松下. 1.有很多公司找我谈 ...

  4. 黑马程序员——JAVA基础之正则表达式&comma;网络爬虫

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 正则表达式: 概念:用于操作字符串的符合一定规则的表达式 特点:用于一些特定的符号来表示一些代码 ...

  5. 黑马程序员spring data jpa 2019年第一版本

    第一步首先创建一个maven工程,导入对于的pom依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  6. 黑马程序员:3分钟带你读懂C&sol;C&plus;&plus;学习路线

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

  7. 2019前端学习路线心得-黑马程序员pink老师

    在规划之前先给大家分享几点心得哈: 1. 学习,特别是在线学习,是非常辛苦的事情,为了少走弯路, 所以一定要系统学习,多借鉴与前辈们总结出来的经验. 2. 不要相信任何说 一周掌握 css, 一周学完 ...

  8. 爬虫神器XPath,程序员带你免费获取周星驰等明星热门电影

    本教程由"做全栈攻城狮"原创首发,本人大学生一枚平时还需要上课,但尽量每日更新文章教程.一方面把我所习得的知识分享出来,希望能对初学者有所帮助.另一方面总结自己所学,以备以后查看. ...

  9. 程序员带你十天快速入门Python&comma;玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

随机推荐

  1. 编译PHP 报错:node&period;c&colon; In function dom&lowbar;canonicalization

    编译PHP 报错:node.c: In function dom_canonicalization  /opt/php-5.2.17/ext/dom/node.c:1953: error: deref ...

  2. BZOJ 1858 线段树

    标记会重叠需要判断. #include <bits/stdc++.h> using namespace std; inline int Max(int x,int y) {return x ...

  3. Searchable&lpar;搜索功能&rpar;(转)

    文章来源:http://developer.android.com/guide/topics/search/search-dialog.html 一.前言: Android为程序的搜索功能提供了统一的 ...

  4. Symfony2学习笔记之数据校验

    校验在web应用程序中是一个常见的任务.数据输入到表单需要被校验.数据在被写入数据库之前或者传入一个webservice时也需要被校验. Symfony2 配备了一个Validator 组件,它让校验 ...

  5. 基于WAMP的Crossbario 安装入门

    简单学习和使用WAMP协议,Router 是crossbario, Client是Autobahn, 了解运作的流程. 测试环境是Centos6 虚拟机一台 目录为 /data/wamp/ ,用的是P ...

  6. Cocos2dx 代码中包含中文导致编译错误的问题解决方法

    从网上下载一个cocos2dx的源码,是IOS版本的,我将其迁移到windows 7下 ,用VS2010编译,出现一堆的C2001错误: 1>d:\cocos2d-x-2.2.6\mygame\ ...

  7. Oracle课程档案,第四天

    “子查询”就是查询中嵌套着另一个查询,也即通过SELECT语句的嵌套使用形成子查询.当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果. 子查询先清除子查询 在清除主查询 ...

  8. &lbrack;UE4&rsqb;最简单的虚幻4网络游戏,使用虚幻4内置服务器

    一.设置游戏窗口合适的大小 二.在新窗口中运行游戏.玩家数量改成大于1.   三.运行游戏就会打开多个窗口 在打包完成的游戏中进行网络游戏: 一.虚幻4打包好的文件是放在WindowsNoEditor ...

  9. 如何验证 Email 地址:SMTP 协议入门教程

    http://www.ruanyifeng.com/blog/2017/06/smtp-protocol.html 作者: 阮一峰 日期: 2017年6月25日   Email 是最常用的用户识别手段 ...

  10. Linux内核设计与实现第八周读书笔记

    第四章 进程调度 进程在操作系统看来是程序的运行态表现形式. 4.1多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于 ...