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.pyfrom requests_html import HTMLSession
import jsonclass PseudoCollege:def __init__(self, url):self.url = urlself.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:]@staticmethoddef get_json(data):info = {}city = Nonefor 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=[])continueinfo[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. 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)#华为云·寻找黑马程序员#

    [摘要] three.js实现的Web 3D字体模型动画 示例代码托管在:http://www.github.com/dashnowords/blogs 有了上一篇基础知识的储备,本节就来制作一下简易 ...

  2. 【带着canvas去流浪(12)】用Three.js制作简易的MARVEL片头动画(上) #华为云·寻找黑马程序员#

    [摘要] 用three.js实现简易的漫威片头动画 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 大作业说明 通读完上一篇博文中提及的教程,觉得 ...

  3. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  4. 一款自带工作流引擎的Node.js全栈框架,程序员的接单神器

      大家好,我是小编南风吹,每天推荐一个小工具/源码,装满你的收藏夹,让你轻松节省开发效率,实现不加班不熬夜不掉头发!   今天小编推荐一款自带工作流引擎的Node.js全栈框架, 是程序员的接单快手 ...

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

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

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

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

  7. 雷军直播带货近2亿:谁说内向的程序员不配拥有诗和远方?

    昨晚是小米十周年之后,雷军在线上发起的首次带货直播,主要销售产品包括了号称"小米十年技术集大成"的旗舰新品小米10至尊纪念版,以及新款红米 Redmi K3098至尊纪念版和98英 ...

  8. 黑马程序员武汉2019新版前端与移动开发学习路线图(视频+工具+书籍+资源)

    一.2019新版前端与移动开发学习路线图---每阶段可掌握的能力及各阶段覆盖的关键字 二.2019新版前端与移动开发学习路线图---学习大纲及各阶段知识点 三.2019新版前端与移动开发学习路线图-- ...

  9. 黑马程序员-10.一位老农带着猫、狗、鱼过河

    ------ Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 题目是10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河.当老农不和 ...

最新文章

  1. JavaScript 页面间传值
  2. LOJ #2733 [JOI2016春季合宿]Sandwiches (DP)
  3. 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响
  4. 【技术干货】浏览器工作原理和常见WEB攻击 (下)
  5. 【九省联考2018】秘密袭击【树形dp】【生成函数】【线段树合并】【多项式插值】
  6. Js对象如何添加方法、查看Api
  7. springboot自动配置的原理_SpringBoot自动配置原理
  8. html设置表格和div的距离,CSS/HTML Div调整大小和表格定位
  9. 【Liunx】Linux 简介
  10. PS抠发丝简单详细方法
  11. 在JavaScript中实现继承的几种方式
  12. powerDesign导出word操作步骤
  13. 飞机有“站票”?英乘客机票座位不存在 无奈坐地板
  14. 海康摄像机在Win10系统的Web浏览器中无法在线预览解决办法
  15. 解决caffe编译时//usr/lib/x86_64-linux-gnu/libSM.so.6: undefined reference to `uuid_unparse_lower@UUI
  16. MySQL里什么是主键_mysql主键是什么?
  17. 转:只要心底热爱,人生就会朝着光明的方向转变
  18. android 7.0 手机拍照裁剪问题
  19. 硬件探索——STM32F4控制74HC595数码管
  20. 传说中的“睡眠算法”的输出分析

热门文章

  1. centos7 python3安装numpy_centos下pip3安装numpy
  2. Luogu 3267 [JLOI2016/SHOI2016]侦察守卫
  3. python之路《七》文件的处理
  4. Spring事件发布
  5. Struts2中的图片验证码
  6. 斐波那契数列(大数)
  7. 从IT的角度思考BIM(二):模式与框架
  8. 【RMQ问题】求数组区间最大值,NYOJ-1185-最大最小值
  9. .NET2.0和microsoft新知识体系-ASP.NET 2.0新特性
  10. CCF201312-2 ISBN号码