微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

2.2 爬虫请求库之selenium

一 介绍

复制代码

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题

selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

from selenium import webdriver
browser=webdriver.Chrome()
browser=webdriver.Firefox()
browser=webdriver.PhantomJS()
browser=webdriver.Safari()
browser=webdriver.Edge() 

复制代码

官网:http://selenium-python.readthedocs.io

二 安装

1、有界面浏览器

 selenium+chromedriver

2、无界面浏览器

PhantomJS不再更新

 selenium+phantomjs

在 PhantomJS 年久失修, 后继无人的节骨眼 
Chrome 出来救场, 再次成为了反爬虫 Team 的噩梦

自Google 发布 chrome 59 / 60 正式版 开始便支持Headless mode 

这意味着在无 GUI 环境下, PhantomJS 不再是唯一选择 

 selenium+谷歌浏览器headless模式

三 基本使用

复制代码

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import webdriverwait #等待页面加载某些元素

browser=webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')

```
input_tag=browser.find_element_by_id('kw')
input_tag.send_keys('美女') #python2中输入中文错误,字符串前加个u
input_tag.send_keys(Keys.ENTER) #输入回车
```


    wait=webdriverwait(browser,10)
    wait.until(EC.presence_of_element_located((By.ID,'content_left'))) #等到id为content_left的元素加载完毕,最多等10秒

```
print(browser.page_source)
print(browser.current_url)
print(browser.get_cookies())
```

finally:
    browser.close()

复制代码

四 选择器

一 基本用法

 View Code

二 xpath

 View Code

 详解

 

获取标签属性

 获取标签属性

五 等待元素被加载

#1、selenium只是模拟浏览器的行为,而浏览器解析页面是需要时间的(执行css,js),一些元素可能需要过一段时间才能加载出来,为了保证能查找到元素,必须等待

#2、等待的方式分两种:
隐式等待:在browser.get('xxx')前就设置,针对所有元素有效
显式等待:在browser.get('xxx')之后设置,只针对某个元素有效

 隐式等待

 显式等待

六 元素交互操作

 点击,清空

 Action Chains

 在交互动作比较难实现的时候可以自己写JS(万能方法

 补充:frame的切换

七 其他

 模拟浏览器的前进后退

 cookies

 选项卡管理

 异常处理

八 项目练习

 自动登录163邮箱并发送邮件

 爬取京东商城商品信息
作业:
    爬取亚马逊iphone手机的商品信息
    爬取天猫python书籍的商品信息
    爬取京东小米手机的商品信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐