一. 课程安排

  • 课程内容
    • 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 快速入门

  1. import js2py
  2. js2py.eval_js('console.log("hello wrold")')
  3. func_js = """
  4. function add(a,b){
  5. return a+b
  6. }
  7. """
  8. add = js2py.eval_js(func_js)
  9. print(add(1, 2))

js代码翻译

  1. import js2py
  2. print(js2py.translate_js("console.log('hello world')"))
  3. # 将js文件翻译为Python脚本
  4. js2py.translate_file('test.js', 'test.py')

js代码中使用函数

  1. import js2py
  2. # 在js代码中导入Python模块并使用
  3. # 使用pyimport语法
  4. js_code = """
  5. pyimport requests
  6. console.log('导入成功');
  7. var response = requests.get('http://www.baidu.com');
  8. console.log(response.url);
  9. console.log(response.content);
  10. """
  11. js2py.eval_js(js_code)

2. 动态HTML技术了解

2.1 爬虫和反爬虫的斗争

1580971113143-48872675-51b6-4e9a-a557-2ead18240eb7.png

爬虫建议

  • 尽量减少请求次数
    • 保存获取到的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 介绍

3.2 Phantomjs快速入门

无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器

Phantomjs案例

  1. # 1.加载网页
  2. from selenium import webdriver
  3. driver = webdriver.PhantomJS("安装目录")
  4. driver.get("https://www.baidu.com")
  5. driver.save_screenshot("baidu.png")
  6. # 2.定位和操作
  7. driver.find_element_by_id("kw").send_keys("长城")
  8. driver.find_element_by_id("su").click()
  9. # 3.查看请求信息
  10. driver.page_source
  11. driver.get_cookies()
  12. driver.current_url
  13. # 4.退出
  14. driver.quit()

3.3 selenium快速入门

  1. from selenium import webdriver
  2. # 实例化浏览器
  3. driver = webdriver.Chrome()
  4. # 发送请求
  5. driver.get('https://www.baidu.com')
  6. # 退出浏览器
  7. driver.quit()