文章目录

  • 一、爬虫建议
  • 二、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)相关推荐

  1. [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据

    一.介绍 本例子用Selenium +phantomjs爬取界面(https://a.jiemian.com/index.php?m=search&a=index&type=news& ...

  2. python爬虫工程师 成长之路十 selenium+phantomjs+request爬取lol所有英雄头像和装备图片

    文章目录 爬取所有英雄头像 选择爬取目标 寻找图片位置 引入selenium和phantomjs 构造xpath对元素定位 获取每个英雄的名字和头像url 最终步骤 爬取装备图片 最后 爬取所有英雄头 ...

  3. 平静的纪中生活(2021.7.12~7.22)

    平静的目录 Day 0 凌晨(不要问为什么有这个) 早上 下午 晚上 Day 1 早上 中午 下午 晚上 今天的博客 Day 2 早上 中午 下午 晚上 今天的博客 Day 3 早上 中午 下午 晚上 ...

  4. 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日

    Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...

  5. 【愚公系列】2021年12月 Python教学课程 01-全方位解读Python

    文章目录 一.python简介 二.python起源 三.Python 的发展趋势 四.Python 语言的特点 1. 简单易学.明确优雅.开发速度快 2. 跨平台.可移植.可扩展.交互式.解释型.面 ...

  6. 电动力学每日一题 2021/10/12

    电动力学每日一题 2021/10/12 (a) To make the EM field trapped inside a perfectly electric conducting cavity, ...

  7. 2021年12届蓝桥杯C++B组省赛

    2021年12届蓝桥杯C++B组省赛 路径 自己的写法 #include <cstring> #include <cstdio> #include <cmath> ...

  8. 书籍《循环经济之道》-观后感-2021年12月

    路虽远矣,行则将至. 事虽难矣,做则必成. 本次分享<循环经济之道-通向可持续发展>读书有感. THE CIRCULAR ECONOMY HANDBOOK-Realizing the Ci ...

  9. 李迟2021年12月知识总结

    本文为 2021 年 12 月知识总结. 研发编码 测试发现,不同语言对浮点数的存储和处理不太相同,比如1.5,有的语言存储的可能是1.49999999999,有的可能是1.500000001.这样四 ...

最新文章

  1. AlertDialog中的EditText不能输入
  2. 产品需求文档的10步
  3. cvs数据导入工具 oracle_为中国企业打造的研发项目管理工具ONES Project已支持Jira数据导入...
  4. 前端学习(2157):webpack-dev-server搭建本地服务
  5. sql服务器时间不正确,使用更改 CPU 频率的实用工具或技术时,SQL Server 计时值可能不正确...
  6. SQL Server错误代码及解释(一)
  7. 关于Linux/kernel.h中的offsetof和container_of宏
  8. 4G网络起源及发展历程
  9. java短语音聊天室_实现一个简单的语音聊天室(多人语音聊天系统)
  10. ccf 3. 缺席考试的是谁?(难度3)
  11. 调和曲线图和轮廓图的比较
  12. 力扣(88.53)补8.31
  13. QGIS之二拓扑检查
  14. [Debug]modelsim simulation error,vsim:3053
  15. 文件管理系统(操作系统)——9张思维导图
  16. debug功能使用解析
  17. 火狐浏览器安装EditThisCookie插件
  18. 翻译法降重助手使用说明
  19. bilibili直播间接收监听和发送弹幕api
  20. C#面向对象 公民Citizen类

热门文章

  1. 计算机修改users用户名,笔记本电脑更改用户名_笔记本电脑更改user
  2. 业务员与客户沟通的礼仪
  3. 2023年4月中国数据库排行榜:达梦厚积薄发夺探花,亚信、星环勇毅笃行有突破
  4. PS和AI安装后报代码为16的错误解决方法
  5. 5G uRLLC技术及其与TSN的融合
  6. Linux:VSS、RSS、PSS和USS的图解说明
  7. 软件研发类应届毕业生培养考核的三个阶段
  8. 对接钉钉消息通知_接入钉钉API发送企业消息
  9. c语言用字符输出李字,二级C语言历年真题汇总__第10篇对文件的输入输出-李赛红.doc...
  10. 软件工程可行性研究报告