1.json模块
1. javascript 中的对象和数组
对象:{'key':'value'}
数组:[x1,x2,x3]
2. 作用
json格式字符串 和 python数据类型之间的转换
3. 常用的一些方法
1. json.loads(): json格式--> Python数据类型
json python
对象 字典
数组 列表
2. json.dumps(): python数据类型 -->json
python json
字典 对象
列表 数组
元组 数组
## 注意
1. json.dumps默认使用ascii编码
2. 添加参数 ensure_ascii=False,禁用ascii编码
2.动态网站数据抓取 - Ajax动态加载
1. 特点 :滚动鼠标滑轮时加载
1. 完整的查询参数
F12 - Qurey String
2. 发送请求是要写F12抓到的Request URL 地址
2. 案例: 豆瓣电影排行榜数据抓取
1. 网址:豆瓣电影 - 排行榜 - 剧情
F12抓到:
Request URL:https://movie.douban.com/j/chart/top_list?
2. 目标:电影名称,电影评分
3. selenium + phantomjs 强大的网络爬虫组合
1. selenium
1. 定义 : Web自动化测试工具,应用于WEB自动化测试
2. 特点
1. 可以运行在浏览器,根据指定的命令操作浏览器,让浏览器自动加载页面
2. 只是一个工具,不支持浏览器的功能,需要与第三方浏览器结合使用
3. 安装
Windows cmd : python -m pip install selenium
2. phantomjs
1. 定义:无界面浏览器
2. 特点
1. 把网站加载到内存进行页面加载
2. 运行高效
3. 安装
1. Windows
1. 将下载的可执行文件放到python安装目录的Scripts目录下
2. Chromedriver.exe的下载地址
https://chromedriver.storage.googleapis.com/index.html
下载和自己浏览器相对应的版本,浏览器版本查看: 右上角->帮助
->关于Google Chrome
4. 示例代码
1. 打开url并获取页面截图
06_selenium+phantomjs实例1.py
2. 填写内容,点击按钮
06_selenium+phantomjs实例2.py
5. 常用方法
1. driver.get(url)
2. driver.page_source : 获取响应的html
3. driver.page_source.find("字符串")
-1 :查找失败
非-1 : 查找成功
4. 单元素查找
1. driver.find_element_by_id("")
2. driver.find_element_by_class_name("")
3. driver.find_element_by_xpath('xpath表达式')
4. 只匹配第一个符合条件的节点对象
5. 多元素查找
1. driver.find_elements_by....
2. 实例见 07_selenium+chrome示例.py
6. 对象名.send_keys("内容")
7. 对象名.click()
8. 对象名.text
获取节点对象的文本内容
4. Chromedriver设置无界面模式
1. opt = webdriver.ChromeOptions()
2. opt.set_headless()
3. driver = webdriver.Chrome(options=opt)
4. driver.get(url)
## opt对象中可添加各种功能
比如说: 无界面 浏览器分辨率
opt.set_headless() # 无界面
opt.add_argument('window-size=1900x300') # 设置分辨率
5. JS分页网站案例(selenium+phantomjs)
1.斗鱼直播主播信息抓取
2. 抓取目标 : 主播名字,观众数量
3. 编写xpath表达式
1. 主播名字:
//div[@class="live-list-content"]//span[@class="dy-name ellipsis fl"]
2. 观众数量:
//div[@id="live-list-content"]//span[@class="dy-num fr"]
3. 下一页按钮(能点)
<a href="#" class="shark-pager-next">下一页</a>
4. 下一页按钮(不能点)
<a href="#" class="shark-pager-next shark-pager-disable shark-pager-disable-next">下一页</a>