复习

在爬虫过程中,我们还可能会遇到各种各样棘手的问题

有的网站登录很复杂,验证码难以破解,比如大名鼎鼎的12306。

有的网站页面交互复杂,所使用的技术难以被爬取,比如,腾讯文档。

还有的网站,对URL的加密逻辑很复杂

不用担心,有了终极武器——selenium,通过它,可以解决以上所有问题

selenium是什么呢?它是一个强大的Python库。

它可以做什么呢?

它可以用几行代码,控制浏览器,做出自动打开输入点击等操作,就像是真正的用户在操作一样

当你遇到验证码很复杂的网站时,selenium允许让人去手动输入验证码,然后把剩下的操作交给机器

对于那些交互复杂、加密复杂的网站,selenium问题简化,爬动态网页如爬静态网页一样简单

由于要真实地运行本地浏览器,打开浏览器以及等待网页渲染完成需要一些时间,

selenium的工作不可避免地牺牲了速度和更多资源,不过,至少不会比人慢

安装

pip install selenium
复制代码

selenium的脚本可以控制所有常见浏览器的操作,在使用之前,需要安装浏览器的驱动

Windows系统安装方法:

下载对应chrome版本的驱动

npm.taobao.org/mirrors/chr…

查看chrome版本

将下载好的chromedriver_win32.zip解压后是一个exe文件,

将其复制到你的Python安装根目录下就好了。

selenium所解析提取的,是Elements中的所有数据, 不管是否ajax

凡是浏览器中能看到的, selenium都能获取到

label = driver.find_element_by_tag_name('label') # 解析网页并提取第一个<lable>标签中的文字
复制代码

find_element_by_BeautifulSoup中的find类似,可以提取出网页中第一个符合要求的元素;

既然BeautifulSoup有提取所有元素的方法find_allselenium也同样有方法。

还有一种解决方案,那就是,使用selenium获取网页,然后交给BeautifulSoup解析和提取。

回顾一下BeautifulSoup的工作方式吧

BeautifulSoup需要把字符串格式的网页源代码解析为BeautifulSoup对象,然后再从中提取数据

selenium刚好可以获取到渲染完整的网页源代码

如何获取呢?也是使用driver的一个方法:page_source

HTML源代码字符串 = driver.page_source
复制代码

获取【你好,蜘蛛侠!】的网页源代码

localprod.pandateacher.com/python-manu…

# 本地Chrome浏览器设置方法
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://localprod.pandateacher.com/python-manuscript/hello-spiderman/')  # 访问页面
time.sleep(2)  # 等待2秒
pageSource = driver.page_source
print(type(pageSource))
print(pageSource)
driver.close()
复制代码

使用requests获取的是response对象, 需要调用text()方法, 才能获取字符串

使用selenium获取到的网页源代码,本身已经是字符串了

获取"百度一下"

from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
time.sleep(2)
soup = BeautifulSoup(driver.page_source,'html.parser')
# 找到"百度一下"
print(soup.find('input',id='su')['value'])
driver.close() # 关掉浏览器
复制代码

自动操作浏览器

.send_keys() 模拟按键输入,自动填写表单

.click() 点击元素

需求: bing一下 "谁是这个世界上最帅的演员"

from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver = webdriver.Chrome()
driver.get('https://cn.bing.com/')
time.sleep(2)
# 往搜索框里输入"谁是这个世界上最帅的演员"
driver.find_element_by_id('sb_form_q').send_keys('谁是这个世界上最帅的演员')
# 点击"百度一下"
driver.find_element_by_id('sb_form_go').click()
# driver.close() # 关掉浏览器
复制代码

css选择器

实战: 登录掘金, 发表评论

登录后, 就可以发表评论了

from selenium import webdriver
import time
driver = webdriver.Chrome()
# 打开网页
driver.get('https://juejin.im/post/5cf495e96fb9a07ef5622025')
time.sleep(2)
# 聚焦输入框, 弹出登录框
js = '''
document.querySelector('#comment-box > div.comment-form.comment-form > div.form-box > div > div > div').click()
'''
driver.execute_script(js)
time.sleep(1)
# 输入用户名和密码
driver.find_element_by_css_selector('#juejin > div.global-component-box > div.auth-modal-box > form > div.panel > div.input-group > div:nth-child(1) > input').send_keys('18538280340')
driver.find_element_by_css_selector('#juejin > div.global-component-box > div.auth-modal-box > form > div.panel > div.input-group > div:nth-child(2) > input').send_keys('yunhepython')
# 单击登录
driver.find_element_by_css_selector('#juejin > div.global-component-box > div.auth-modal-box > form > div.panel > button').click()
time.sleep(2)
# 点击输入框
js = '''
document.querySelector('#comment-box > div.comment-form.comment-form > div.form-box > div > div > div').click();
'''
driver.execute_script(js)
# 写评论
driver.find_element_by_css_selector('#comment-box > div.comment-form.comment-form.focused > div.form-box > div.input-box > div > div').send_keys('干货满满...')
# 提交评论
driver.find_element_by_css_selector('#comment-box > div.comment-form.comment-form.focused > div.form-box > div.action-box > div.submit > button').click()
复制代码

总结

使用selenium获取数据的方法:.get('URL')

中文文档: selenium-python-zh.readthedocs.io/en/latest/

英文文档: seleniumhq.github.io/selenium/do…

小作业: 使用爬虫, 下载网易云音乐

网易云播放连接

http://music.163.com/song/media/outer/url?id=这里填歌曲id.mp3

代码执行效果...

C:\Users\Administrator\Desktop\demo>python -u "c:\Users\Administrator\Desktop\小白selenium爬取网易云音乐\musicList.py"
请输入您在网易云想听的歌曲: 水手
DevTools listening on ws://127.0.0.1:55067/devtools/browser/83140ac0-30e3-4a3c-b93a-d61cbb173f5a
1: 水手 - 郑智化
2: 水手 - 郑智化
3: 水手 - 郑智化
4: 水手公园 - GALA
5: 水手(Live) - 郑智化
6: 水手(Cover:郑智化) - 陈洲宏
7: 水手 - 迪克牛仔
8: 水手公园 + 阳光彩虹小白马 (Live) - (原唱:GALA/大张伟) - 何屹繁/钮杨圣轩/哲野/润羿///
9: 水手 - 张泽禹/胡钰佳
10: 水手 - 陈进
11: 水手 - 张玮玮和郭龙
12: 水手 - 群星
13: 水手 - 洪一平
14: 水手公园 - GALA
15: 大力水手主题曲 - Various Artists
16: 水手 - 动力火车
17: 水手 - 迪克牛仔
18: 水手 - Caesar L
19: 水手 - 群星
20: 水手有点怕水(Hydrophobic Salior) - MT1990
21: セーラー服と機関銃 - (电影 水手服与机关枪:毕业 主题曲 / 映画『セーラー服と機関銃 ‐卒業‐』主題歌) - 橋本環奈
22: 水手 - 张伟哲
23: 水手 - 陈秋霞
24: 郑智化-水手 (DJ阿福 Remix)(DJ阿福 (DJ-Afu) remix) - DJ阿福
25: 水手 (Tribute Version) - 複製貓
26: 少女与水手(口琴) - 群星
27: 小小世界+荷包蛋+说哈罗+山上的孩子+快乐的向前走+哎哎+大力水手+手牵手+哈哈笑+稻草里的火鸡+种树歌+大象玩皮球+小栗子+下雨+小红妹妹和小熊+虹彩妹妹+木
瓜+小螳螂+四只小小鸟+西风的话+哈巴狗+兰花草+泥娃娃 - 群星
28: 【局座】水手 - LPY/东林二七
29: セーラー服と机関铳 - 长泽雅美
30: 水手物语 - 陈百强
请输入您想下载的歌曲序号: 1
水手 - 郑智化 正在下载...
水手 - 郑智化 下载完成!!!
C:\Users\Administrator\Desktop\demo>
复制代码

快速跳转:

猫哥教你写爬虫 000--开篇.md
猫哥教你写爬虫 001--print()函数和变量.md
猫哥教你写爬虫 002--作业-打印皮卡丘.md
猫哥教你写爬虫 003--数据类型转换.md
猫哥教你写爬虫 004--数据类型转换-小练习.md
猫哥教你写爬虫 005--数据类型转换-小作业.md
猫哥教你写爬虫 006--条件判断和条件嵌套.md
猫哥教你写爬虫 007--条件判断和条件嵌套-小作业.md
猫哥教你写爬虫 008--input()函数.md
猫哥教你写爬虫 009--input()函数-人工智能小爱同学.md
猫哥教你写爬虫 010--列表,字典,循环.md
猫哥教你写爬虫 011--列表,字典,循环-小作业.md
猫哥教你写爬虫 012--布尔值和四种语句.md
猫哥教你写爬虫 013--布尔值和四种语句-小作业.md
猫哥教你写爬虫 014--pk小游戏.md
猫哥教你写爬虫 015--pk小游戏(全新改版).md
猫哥教你写爬虫 016--函数.md
猫哥教你写爬虫 017--函数-小作业.md
猫哥教你写爬虫 018--debug.md
猫哥教你写爬虫 019--debug-作业.md
猫哥教你写爬虫 020--类与对象(上).md
猫哥教你写爬虫 021--类与对象(上)-作业.md
猫哥教你写爬虫 022--类与对象(下).md
猫哥教你写爬虫 023--类与对象(下)-作业.md
猫哥教你写爬虫 024--编码&&解码.md
猫哥教你写爬虫 025--编码&&解码-小作业.md
猫哥教你写爬虫 026--模块.md
猫哥教你写爬虫 027--模块介绍.md
猫哥教你写爬虫 028--模块介绍-小作业-广告牌.md
猫哥教你写爬虫 029--爬虫初探-requests.md
猫哥教你写爬虫 030--爬虫初探-requests-作业.md
猫哥教你写爬虫 031--爬虫基础-html.md
猫哥教你写爬虫 032--爬虫初体验-BeautifulSoup.md
猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-作业.md
猫哥教你写爬虫 034--爬虫-BeautifulSoup实践.md
猫哥教你写爬虫 035--爬虫-BeautifulSoup实践-作业-电影top250.md
猫哥教你写爬虫 036--爬虫-BeautifulSoup实践-作业-电影top250-作业解析.md
猫哥教你写爬虫 037--爬虫-宝宝要听歌.md
猫哥教你写爬虫 038--带参数请求.md
猫哥教你写爬虫 039--存储数据.md
猫哥教你写爬虫 040--存储数据-作业.md
猫哥教你写爬虫 041--模拟登录-cookie.md
猫哥教你写爬虫 042--session的用法.md
猫哥教你写爬虫 043--模拟浏览器.md
猫哥教你写爬虫 044--模拟浏览器-作业.md
猫哥教你写爬虫 045--协程.md
猫哥教你写爬虫 046--协程-实践-吃什么不会胖.md
猫哥教你写爬虫 047--scrapy框架.md
猫哥教你写爬虫 048--爬虫和反爬虫.md
猫哥教你写爬虫 049--完结撒花.md

转载于:https://juejin.im/post/5cfc4addf265da1b8f1ab3f8

猫哥教你写爬虫 043--模拟浏览器相关推荐

  1. 猫哥教你写爬虫 046--协程-实践-吃什么不会胖

    吃什么不会胖? 低热量食物 食物的数量有千千万,如果我们要爬取食物热量的话,这个数据量必然很大. 使用多协程来爬取大量的数据是非常合理且明智的选择 如果我们要爬取的话,那就得选定一个有存储食物热量信息 ...

  2. 猫哥教你写爬虫 006--条件判断和条件嵌套

    流程控制 复仇者联盟3-无限战争(搜集宝石) python里面, 不需要使用;来结尾, 因为python是使用换行来结束一行代码的 if判断, 没有{}, python使用缩进来表示层级关系 if.. ...

  3. 猫哥教你写爬虫 002--作业-打印皮卡丘

    作业 请你使用print()函数将下面的皮卡丘打印出来, 使用三种方式 へ /|/\7 ∠_// │ / /│ Z _,< / /`ヽ│ ヽ / 〉Y ` / /イ● 、 ● ⊂⊃〈 /() へ ...

  4. 猫哥教你写爬虫 005--数据类型转换-小作业

    小作业 程序员的一人饮酒醉 请运用所给变量,使用**str()**函数打印两句话. 第一句话:1人我编程累, 碎掉的节操满地堆 第二句话:2眼是bug相随, 我只求今日能早归 number1 = 1 ...

  5. 猫哥教你写爬虫 004--数据类型转换-小练习

    小练习, 改一下代码 word = '3.8' number = 1 sentence = '人工智障说:3.8+1等于' print(sentence+str(int(float(word)+num ...

  6. 猫哥教你写爬虫 037--爬虫-宝宝要听歌

    戴上耳机, 这个世界与我无关... 让我们用音乐洗涤心灵吧... 我们从哪个网站爬取资源呢? 专治各种不服... 打开酷狗官网, 可以看到搜索框,我们要爬取的数据就是搜索歌曲后, 酷狗后台返回的歌曲列 ...

  7. 猫哥教你写爬虫 027--模块介绍

    time模块 import time # 时间对象转美式时间字符串 print(time.asctime()) # Wed May 29 09:25:07 2019 print(time.asctim ...

  8. 猫哥教你写爬虫 000--开篇

    写在前面 快速跳转: 猫哥教你写爬虫 000--开篇.md 猫哥教你写爬虫 001--print()函数和变量.md 猫哥教你写爬虫 002--作业-打印皮卡丘.md 猫哥教你写爬虫 003--数据类 ...

  9. OpenGL.Shader:志哥教你写一个滤镜直播客户端:仿3个抖音滤镜效果(4镜像/电击/灵魂出窍)

    OpenGL.Shader:志哥教你写一个滤镜直播客户端(可能是结束篇) OpenGL.Shader基本的图像处理知识已经学习的7788了,所以这篇应该是滤镜直播客户端的最后一篇了,之后会出基于FFm ...

  10. OpenGL.Shader:志哥教你写一个滤镜直播客户端(5)视觉滤镜:对比度、曝光、马赛克

    OpenGL.Shader:志哥教你写一个滤镜直播客户端(5) 上一章介绍了如何在渲染nv21流的时候进行滤镜的无缝切换,这章内容紧接上一章,介绍三种滤镜特效:对比度.曝光.马赛克,并介绍如何动态调节 ...

最新文章

  1. 从生态、业绩角度分析芯片行业
  2. 基于Python的频谱分析(二)——频谱泄露
  3. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
  4. 如何检测Safari,Chrome,IE,Firefox和Opera浏览器?
  5. 微服务实战(四):服务发现的可行方案以及实践案例
  6. jpa和hibernate_JPA和Hibernate级联类型的初学者指南
  7. 项目复盘:从0到1,如何做好竞品分析?
  8. iplat62--按钮使用规范
  9. nova虚拟机迁移一
  10. 【C语言】大小写转换
  11. 计算机编程高中能学吗,高中生怎么学习计算机编程
  12. 压力换算公斤单位换算_压力单位转换器_压力换算器 百分百好站
  13. “易融窃贼”--网贷平台隐私窃取
  14. 程序员必知必会网络传输之TCP/IP协议族,共864页的详解文档让你原地起飞!
  15. 手机算不算计算机系统,现在的手机是不是和电脑一样是组装机
  16. 给学妹写C程——中国海洋大学C语言程序设计课作业(一)
  17. 目标检测入坑指南3:VGGNet神经网络
  18. MySQL 云数据库物理备份本地恢复方案
  19. Python代码实现NIST随机性测试
  20. (转)top关键字与top表达式(SQLServer)

热门文章

  1. 当大数据遇到保险:传统精算模型将被颠覆
  2. R语言使用lm函数构建多元回归模型、并根据模型系数写出回归方程、使用summary函数计算出模型的汇总统计信息(R方、F统计量、残差分布、残差标准误差、系数等)
  3. 拟合系数 / 决定系数 / R方 / R^2的理解
  4. 编译原理_P1003
  5. 上帝模式代码_生产代码中的上帝模式
  6. 华为s5700交换机忘记console的密码,怎么恢复
  7. 华为 15 到 18 级的研发族社招工作岗位内推
  8. 【转载】HBase基本概念和hbase shell常用命令用法
  9. 我为什么鼓励工程师写博客
  10. 【转载】我为什么鼓励工程师写blog