猫哥教你写爬虫 043--模拟浏览器

复习

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

有的网站登录很复杂,验证码难以破解,比如大名鼎鼎的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') # 解析网页并提取第一个标签中的文字
复制代码

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--模拟浏览器)