2021/5/12爬虫第十一次课(ajax、selenium、Phantomjs)
文章目录
- 一、爬虫建议
- 二、ajax技术的处理(selenium背景介绍)
- 2.1ajax基本介绍
- 2.2获取ajax加载的数据的方式
- 三、Phantomjs快速入门
- 四、Selenium+chromedriver
- 4.1Selenium+chromedriver 介绍
- 4.2selenium快速入门
一、爬虫建议
爬虫和反爬虫的斗争
爬虫建议
- 尽量减少请求次数
- 保存获取到的HTML,供查错和重复使用
- 关注网站的所有类型的页面
- H5页面
- APP
- 多伪装(随机U-A、cookie、代理IP)
- 利用多线程分布式
- 在不被发现的情况下我们尽可能的提高速度
随机U-A实现
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.firefox)
二、ajax技术的处理(selenium背景介绍)
前导:
我们以前爬取的网页大多数都是一些静态的网页
何为静态网页?其实就是 我们像一个 网站(url)发起请求 得到响应 那么这些响应的数据都是在网页的源代码当中 ,这时就直接解析
除了静态网页 还有一些网页或者是网站的数据不在这个请求的url 地址当中。那么这些数据有可能是通过ajax技术加载出来的数据
2.1ajax基本介绍
了解动态HTML技术
- JS
- 是网络上最常用的脚本语言,它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页
- jQuery
- jQuery是一个快速、简介的JavaScript框架,封装了JavaScript常用的功能代码
- ajax
- ajax可以使用网页实现异步更新,可以在不重新加载整个网页的情况下,对网页的某部分进行更新
2.2获取ajax加载的数据的方式
1.直接分析ajax调用的接口(真正的目标URL)。然后通过代码请求这个接口。
2.使用Selenium+chromedriver模拟浏览器行为获取数据
两者的区别
那么这两种方式用哪一个? 1 具体情况具体分析 2 根据你自己的技术的掌握长度
案例(直接分析ajax调用的接口)
百度贴吧
需求:爬取 海贼王吧 爬取桌面壁纸
1 分析页面
我们发现要爬取的数据是图片,那么就只要找到它(每张图片)的src 就可以了经过分析发现网页源码当中没有我们想要爬取的数据。然后我们确定它是经过ajax加载的数据
一般情况下 ajax请求都在 XHR这个选项(XMLHttpRequest)
通过network 继续找真实的数据接口
目标url
https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=1&pe=40&info=1&_=1620822548466
解析数据
可以把(response)数据通过json (利用json.cn)转换成Python的数据类型的字典(preview)。 然后通过key-value形式找到 每张图片的url
也可以通过正则(对(response)数据直接进行解析)
murl: "https://imgsa.baidu.com/forum/wh%3D321%2C200/sign=14a3fa55828ba61edfbbc02c7305bb38/4c53ca8065380cd734b55e72a144ad34588281b0.jpg"
("murl":"(.*?)")
2 实现逻辑(具体的一些细节)
通过结果发现呢? 图片的数量少了 有可能是服务器发了多次请求。所以这个时候我们就想到了 会不会还有一些数据接口呢?
我们继续往下拖动图片的过程当中 发现又出现了2个数据接口
https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=40&pe=79&wall_type=h&_=1620823519114
https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=79&pe=118&wall_type=h&_=1620823534332
得出规律
ps=1 ps=40 ps=79 pe=40 pe=79 pe=118 规律 39
for i in range(1,80,39):print(i)
总结:
1 先确定要爬取的数据是否在网页的源码当中
如果在正常的取请求,如果不在要通过Network 分析真实的数据接口(数据包、name、URL)
2 在确定好数据接口之后 像目标的url发起请求 获取响应
3 正常的用 比较合适的技术去解析数据
如果数据数量不对。然后继续往下拖动拖动条 找到相似的数据包 进行分析解决
补充: 具体情况具体分析
附代码
技巧:
response(html源代码)可能看的不舒服时,可以参考 检查或可以把(response)数据通过json (利用json.cn)转换成Python的数据类型的字典
import requests
import re
import time
'''https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=1&pe=40&info=1&_=1620822548466https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=40&pe=79&wall_type=h&_=1620823519114https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=79&pe=118&wall_type=h&_=1620823534332ps=1 ps=40 ps=79 pe=40 pe=79 pe=118 规律 39'''
name = 1
for i in range(1,80,39):# 目标url# url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&ps=1&pe=40&info=1&_=1620822548466'url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&alt=jview&rn=200&tid=1934517161&pn=1&' + '&ps=' + str(i) + '&pe=' + str(39 + i) + '&wall_type=h&_=1620823534332'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}res = requests.get(url,headers=headers)# print(res.text)# 正则表达式匹配数据img_urls = re.findall('"murl":"(.*?)"',res.text)for img_url in img_urls:img_response = requests.get(img_url)# 保存数据print('正在下载第%d张图片' % name)with open('img/%d.jpg'%name,'wb') as file_obj:# time.sleep(0.5)file_obj.write(img_response.content)name += 1time.sleep(1)
三、Phantomjs快速入门
一无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器
用处:
1 有的程序是用的是它
2 对比的去学习chromedriver
练习
from selenium import webdriver
import time
# 没有配置之前需要添加驱动的路径
driver = webdriver.PhantomJS("安装目录")
'''
没有配置驱动会报的错误
Message: 'phantomjs' executable needs to be in PATH. 解决 找到驱动的绝对路径或者添加到path环境变量当中 一劳永逸(可以添加到你python解释器的文件夹当中)
'''driver.get('https://www.baidu.com/') # 加载一个网站# 先定位输入框, 再输入,
driver.find_element_by_id('kw').send_keys('python')# input_tag = driver.find_element_by_id('kw')
# input_tag.send_keys('python')
#先定位, 再操作
driver.find_element_by_id('su').click()
time.sleep(2)print(driver.current_url) # 查看当前请求的urldriver.save_screenshot('baidu.png')
四、Selenium+chromedriver
4.1Selenium+chromedriver 介绍
• selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏
• chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:
• Chrome:http://chromedriver.storage.googleapis.com/index.html
• Firefox:https://github.com/mozilla/geckodriver/releases
• Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
• Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/
• chromedriver安装总结:https://www.jianshu.com/p/a383e8970135
• 安装Selenium:pip install selenium
4.2selenium快速入门
from selenium import webdriver
import time
driver = webdriver.Chrome()# 加载百度 咋学习呀?通过简单的源码分析 发现了这个方法的区别driver.get('https://www.baidu.com/')time.sleep(2)
driver.maximize_window()
time.sleep(1)
# 关闭窗口(当前窗口)
driver.close()time.sleep(2)
# 退出驱动(关闭所有的窗口)
driver.quit()
2021/5/12爬虫第十一次课(ajax、selenium、Phantomjs)相关推荐
- [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据
一.介绍 本例子用Selenium +phantomjs爬取界面(https://a.jiemian.com/index.php?m=search&a=index&type=news& ...
- python爬虫工程师 成长之路十 selenium+phantomjs+request爬取lol所有英雄头像和装备图片
文章目录 爬取所有英雄头像 选择爬取目标 寻找图片位置 引入selenium和phantomjs 构造xpath对元素定位 获取每个英雄的名字和头像url 最终步骤 爬取装备图片 最后 爬取所有英雄头 ...
- 平静的纪中生活(2021.7.12~7.22)
平静的目录 Day 0 凌晨(不要问为什么有这个) 早上 下午 晚上 Day 1 早上 中午 下午 晚上 今天的博客 Day 2 早上 中午 下午 晚上 今天的博客 Day 3 早上 中午 下午 晚上 ...
- 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日
Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...
- 【愚公系列】2021年12月 Python教学课程 01-全方位解读Python
文章目录 一.python简介 二.python起源 三.Python 的发展趋势 四.Python 语言的特点 1. 简单易学.明确优雅.开发速度快 2. 跨平台.可移植.可扩展.交互式.解释型.面 ...
- 电动力学每日一题 2021/10/12
电动力学每日一题 2021/10/12 (a) To make the EM field trapped inside a perfectly electric conducting cavity, ...
- 2021年12届蓝桥杯C++B组省赛
2021年12届蓝桥杯C++B组省赛 路径 自己的写法 #include <cstring> #include <cstdio> #include <cmath> ...
- 书籍《循环经济之道》-观后感-2021年12月
路虽远矣,行则将至. 事虽难矣,做则必成. 本次分享<循环经济之道-通向可持续发展>读书有感. THE CIRCULAR ECONOMY HANDBOOK-Realizing the Ci ...
- 李迟2021年12月知识总结
本文为 2021 年 12 月知识总结. 研发编码 测试发现,不同语言对浮点数的存储和处理不太相同,比如1.5,有的语言存储的可能是1.49999999999,有的可能是1.500000001.这样四 ...
最新文章
- AlertDialog中的EditText不能输入
- 产品需求文档的10步
- cvs数据导入工具 oracle_为中国企业打造的研发项目管理工具ONES Project已支持Jira数据导入...
- 前端学习(2157):webpack-dev-server搭建本地服务
- sql服务器时间不正确,使用更改 CPU 频率的实用工具或技术时,SQL Server 计时值可能不正确...
- SQL Server错误代码及解释(一)
- 关于Linux/kernel.h中的offsetof和container_of宏
- 4G网络起源及发展历程
- java短语音聊天室_实现一个简单的语音聊天室(多人语音聊天系统)
- ccf 3. 缺席考试的是谁?(难度3)
- 调和曲线图和轮廓图的比较
- 力扣(88.53)补8.31
- QGIS之二拓扑检查
- [Debug]modelsim simulation error,vsim:3053
- 文件管理系统(操作系统)——9张思维导图
- debug功能使用解析
- 火狐浏览器安装EditThisCookie插件
- 翻译法降重助手使用说明
- bilibili直播间接收监听和发送弹幕api
- C#面向对象 公民Citizen类
热门文章
- 计算机修改users用户名,笔记本电脑更改用户名_笔记本电脑更改user
- 业务员与客户沟通的礼仪
- 2023年4月中国数据库排行榜:达梦厚积薄发夺探花,亚信、星环勇毅笃行有突破
- PS和AI安装后报代码为16的错误解决方法
- 5G uRLLC技术及其与TSN的融合
- Linux:VSS、RSS、PSS和USS的图解说明
- 软件研发类应届毕业生培养考核的三个阶段
- 对接钉钉消息通知_接入钉钉API发送企业消息
- c语言用字符输出李字,二级C语言历年真题汇总__第10篇对文件的输入输出-李赛红.doc...
- 软件工程可行性研究报告