js2py和 selenium
js2py
-
简介
- js2py是纯python实现的库,用于在python中运行js代码,本质上是将js代码翻译成python代码
-
用法
-
在python中使用js函数
import js2py js_add = """ function add(a,b){ return a+b } """ py_add = js2py.eval_js(js_add) print(py_add(1,2)) # 变量="""js函数""" # 变量1 = js2py.eval_js(变量), 将js函数翻译成python函数 # 调用变量1 js_var = """ var a = 'hello world' """ py_var = js2py.eval_js(js_var) print(py_var)
-
js代码翻译
import js2py print(js2py.translate_js("console.log('hello world')")) # 将js文件翻译为Python脚本 js2py.translate_file('test.js', 'test.py')
-
动态html技术
- 爬虫思路总结
- 1 准备目标url
- 页码总数明确,找到页面的规律来获取url
- 页码总数不明确,如果url比较少可以放在列表中遍历。通过xpath来提取页码
- 2 向目标的url发送请求
- 随机添加UA
- 代理IP
- 添加cookie
- 3 提取数据
- 确定数据位置
- 数据在当前的url当中我们直接发起请求
- 数据不在当前url中
- 通过network来分析数据
- 通过search来查询我们需要的数据
- re,xpath,bs4
- 确定数据位置
- 4 保存数据
- html,txt,csv
- 数据库mysql mongodb redis
- 1 准备目标url
-
爬虫建议
-
尽量减少请求次数
- 保存获取到的HTML,供查错和重复使用
-
关注网站的所有类型的页面
- H5页面
- APP
-
多伪装
- 代理IP
- 随机请求头
-
利用多线程分布式
- 在不被发现的情况下我们尽可能的提高速度
-
-
ajax基本介绍
-
动态了解HTML技术
-
JS
- 是网络上最常用的脚本语言,它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页
-
jQuery
- jQuery是一个快速、简介的JavaScript框架,封装了JavaScript常用的功能代码
-
ajax
- ajax可以使用网页实现异步更新,可以在不重新加载整个网页的情况下,对网页的某部分进行更新
-
-
获取ajax数据的方式
1.直接分析ajax调用的接口。然后通过代码请求这个接口。
2.使用Selenium+chromedriver模拟浏览器行为获取数据
方式 优点 缺点 分析接口 直接可以请求到数据。不需要做一些解析工作。代码量少,性能高 分析接口比较复杂,特别是一些通过js混淆的接口,要有一定的js功底。容易被发现是爬虫。 selenium 直接模拟浏览器的行为。浏览器能请求到的,使用selenium也能请求到。爬虫更稳定。 代码量多。性能
-
-
Phantomjs快速入门
from selenium import webdriver import time driver = webdriver.PhantomJS() # 打开网站 driver.get('https://www.baidu.com/') # 定位操作和输入内容 driver.find_element_by_id('kw').send_keys('中国') # 点击搜索 driver.find_element_by_id('su').click() # time.sleep(10) # 网站截屏 # driver.save_screenshot('baidu.png')。 # 查看请求的url地址 print(driver.current_url) # 查看网页源码 print(driver.page_source)
-
selenium快速入门
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('https://www.baidu.com') driver.find_element_by_id('kw').send_keys('中国') driver.find_element_by_id('su').click() # 窗口最大化 driver.maximize_window() # 窗口最小化 driver.minimize_window() time.sleep(4) # 推出当前窗口 driver.close() # 推出浏览器 time.sleep(2) driver.quit()
网友评论