爬虫从入门到入预(20)

今天开始学习新的爬虫分支,selenuim。selenuim 是一个自动化测试的工具,但是也时长用于爬虫实战。

#能不能让我们的程序连接到浏览器,让浏览器完成各种复杂的操作,我们只用接受最终的结果
#selenium,自动化测试工具
#可以打开浏览器,像人一样操作浏览器
#程序员可以从selenuim上提取网页中的各种信息
#让selenium启动谷歌浏览器

上代码:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
#2022年selenuim更新之后,webdriver的语法有更改,这里需要从webdriver.common导入By
from selenium.webdriver.common.by import By

后面是练习环节

#登录网站
web= Chrome()
web.get("http://www.lagou.com")

#点击选项
el=web.find_element_by_xpath('//*[@id="changeCityBox"]/ul/li[4]/a')
el.click()#点击事件

#为了防止点击事件结束后程序继续执行后面代码,产生冲突错误,这里设置睡眠时间
time.sleep(2)

#找到输入框,输入:python,回车或者点击搜索

web.find_element_by_xpath('//*[@id="search_input"]').send_keys("python",Keys.ENTER)

time.sleep(1)

web.find_element_by_xpath('//*[@id="jobList"]/div[1]/div[1]/div[1]/div[1]/div[1]/a').click()

#如何进入到新窗口中提取信息?
#注意,在selenuim中默认是不把视角切换到新窗口当中的
web.switch_to.window(web.window_handles[-1])

#在新窗口当中提取内容
job_desc=web.find_element_by_xpath('//*[@id="job_detail"]/dd[2]/div').text
print(job_desc)

#关掉子窗口
web.close()

#回到selenuim的主窗口视角
web.switch_to.window(web.window_handles[0])
#验证已经回到主窗口
print(web.find_element_by_xpath('//*[@id="jobList"]/div[1]/div[1]/div[1]/div[1]/div[1]/a').text)

#查找存放的数据,进行数据提取
#找到页面存放的数据的div
div_list=web.find_elements_by_xpath('//*[@id="jobList"]/div[1]/div')
for div in div_list:
    job_salary=div.find_element_by_xpath('./div/div/div[2]/span').text
    job_name_loca=div.find_element_by_xpath('./div/div/div[1]/a').text
    company=div.find_element_by_xpath('./div/div[2]/div[1]/a').text
    print(job_name_loca,job_salary,company)

上述的代码主要实在lagou网进行的,下面再从91看剧试试

#91看剧实战
web.get("http://www.91kanju2.com/vod-play/541-2-1.html")
iframe=web.find_element(by=By.XPATH,value='//*[@id="player_iframe"]')
web.switch_to.frame(iframe)
#web.switch_to.default_content()#切换回原页面
time.sleep(3)
mian_message=web.find_element(by=By.XPATH,value='//*[@id="main-message"]/h1/span').text
print(mian_message)

总结:selenuim的优点相较于传统的requests请求好在它是让程序连接到浏览器,让程序像人一样使用浏览器去访问网站。因此所见即所得。时常我们遇到客户端渲染,很多信息,服务器是不写进源代码里面的,因此我们打印respose的时候经常找不到我们想要的信息和数据。从而我们需要抓包然后一点点去分析。而selenuim的过程就更加的拟人。可以通过验证,可以输入关键词搜索,最重要的是我们可以直接得到客户端渲染之后的数据。但是selenuim也是有其短板,就是访问的过程比较慢,处理时长较长。尤其进行大规模数据爬取的时候效率绝对没有requests高,而且启动浏览器也比较占内存。 

后面我们选择91看剧实战是因为它的html结构有些许不同。视频一般封装在iframe里面,找到iframe之后,我们还需要让selenuim把视角聚焦在iframe内部。使用web.switch_to_frame。然后回到原页面即主页面可以使用web.switch_to_default_content

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值