一. 课程安排
- 课程内容
- js2py简介
- 动态HTML技术了解
- selenium+chromedriver获取动态数据
二. 课堂笔记
1. js2py简介
1.1 js2py模块使用
- Python中执行JS代码,通常两个库:js2py,pyexecjs
- js2py是纯python实现的库,用于在python中运行js代码,本质上是将js代码翻译成python代码
- js2py安装 pip install js2py
1.2 快速入门
import js2pyjs2py.eval_js('console.log("hello wrold")')func_js = """function add(a,b){return a+b}"""add = js2py.eval_js(func_js)print(add(1, 2))
js代码翻译
import js2pyprint(js2py.translate_js("console.log('hello world')"))# 将js文件翻译为Python脚本js2py.translate_file('test.js', 'test.py')
js代码中使用函数
import js2py# 在js代码中导入Python模块并使用# 使用pyimport语法js_code = """pyimport requestsconsole.log('导入成功');var response = requests.get('http://www.baidu.com');console.log(response.url);console.log(response.content);"""js2py.eval_js(js_code)
2. 动态HTML技术了解
2.1 爬虫和反爬虫的斗争

爬虫建议
- 尽量减少请求次数
- 保存获取到的HTML,供查错和重复使用
- 关注网站的所有类型的页面
- H5页面
- APP
- 多伪装
- 代理IP
- 随机请求头
- 利用多线程分布式
- 在不被发现的情况下我们尽可能的提高速度
2.2 ajax基本介绍
动态了解HTML技术
- JS
- 是网络上最常用的脚本语言,它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页
- jQuery
- jQuery是一个快速、简介的JavaScript框架,封装了JavaScript常用的功能代码
- ajax
- ajax可以使用网页实现异步更新,可以在不重新加载整个网页的情况下,对网页的某部分进行更新
获取ajax数据的方式
1.直接分析ajax调用的接口。然后通过代码请求这个接口。
2.使用Selenium+chromedriver模拟浏览器行为获取数据
| 方式 | 优点 | 缺点 |
|---|---|---|
| 分析接口 | 直接可以请求到数据。不需要做一些解析工作。代码量少,性能高 | 分析接口比较复杂,特别是一些通过js混淆的接口,要有一定的js功底。容易被发现是爬虫。 |
| selenium | 直接模拟浏览器的行为。浏览器能请求到的,使用selenium也能请求到。爬虫更稳定。 | 代码量多。性能 |
3. Selenium+chromedriver获取动态数据
3.1 Selenium 介绍
- selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏
- chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:
- 下载chromedriver
- 百度搜索:淘宝镜像(https://npm.taobao.org/)
- 安装总结:https://www.jianshu.com/p/a383e8970135
- 安装
Selenium:pip install selenium
3.2 Phantomjs快速入门
无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器
Phantomjs案例
# 1.加载网页from selenium import webdriverdriver = webdriver.PhantomJS("安装目录")driver.get("https://www.baidu.com")driver.save_screenshot("baidu.png")# 2.定位和操作driver.find_element_by_id("kw").send_keys("长城")driver.find_element_by_id("su").click()# 3.查看请求信息driver.page_sourcedriver.get_cookies()driver.current_url# 4.退出driver.quit()
3.3 selenium快速入门
from selenium import webdriver# 实例化浏览器driver = webdriver.Chrome()# 发送请求driver.get('https://www.baidu.com')# 退出浏览器driver.quit()
