数据提取库:bs4最简单,xpath中,re正则难

爬虫--selenium,PhantomJS

动态页面爬取环境配置,安装软件:

1.selenium

cmd:

        > workon  env1

        >pip install  selenium

        >pip list

2.PhantomJS

1、解压放到:C:\phantomjs-2.1.1-windows
2、需设置环境变量,Path 添加 C:\phantomjs-2.1.1-windows\bin                                                                                      3、win+R,输入 cmd 打开控制台,输入 phantomjs -v,若输出了版本号,则证明安装成功

3.chrome dirver 的安装

1、打开如下页面:
https://sites.google.com/a/chromium.org/chromedriver/downloads打开链接
对照下载说明,找到对应的 ChromeDriver 版本 2.38
2、打开如下网页:
http://chromedriver.storage.googleapis.com/index.html打开链接
选取 2.38 文件夹,下载对应文件

3、把chromedriver.exe文件放置到如下位置之一:
(1)chrome 的安装目录下(eg:C:\Program Files (x86)\Google\Chrome\Application)
(2)Python 的安装目录下(eg:D:\software\Python35)

4、Path 进行编辑,在变量值后面加入 chrome 或 Python 的安装目录

爬虫--selenium,PhantomJS

测试安装是否成功

from selenium import webdriver
# browser = webdriver.PhantomJS()  #无头浏览器
browser = webdriver.Chrome()     # 谷歌浏览器

browser.get("http://www.baidu.com")
print(browser.page_source)
browser.close()

JavaScript:是网络上最常用也是支持者最多的客户端脚本语言,不需要重载页面直接提交表单

jQuery:动态的创建HTML内容

ajax:局部刷新网页,返回json数据格式,异步 JavaScript 和XML

Selenium+浏览器:自动化测试工具,谷歌浏览器或者无头PhantomJS

1.Selenium:是一个web的自动化测试工具,不带浏览器,它支持所有主流的浏览器

可以根据我们的指令定位元素单元素和多元素,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生,交互功能 :点击和模拟登录,鼠标移动,拖拽 ,对HTML元素操作:对弹出框,下拉框操作

代理ip设置

2.PhantomJS:无界面的浏览器

 动态页面的请求

网页抓取

1、要使用 selenium 首先导入 webdriver

2、生成浏览器对象 driver = webdriver.PhantomJS()

3、driver.get(url)方法:加载指定页面,阻塞方式直到加载完成

4、driver.find_element_by_id(elemid)方法:获取页面指定 id 的标签

5、driver.title:页面标题

6、driver.page_source:页面源码

7、driver.get_cookies():获取页面 coolies

8、driver.savescreenshot(filename): 保存当前页面

9、driver.find_element_by_id("kw").send_keys("输入写的信息"):指定元素设置 value,通常用于 input field
10、 driver.find_element_by_id("su").click()模拟点击,通常用于按钮
11、 driver.find_element_by_id("kw").clear():清除输入框内容
12、 driver.quit():关闭浏览器

driver.close():关闭当前页面,如果只有一个页面,会关闭浏览器

driver.current_url: 获取当前

数据解析提取

定位 UI 元素 (WebElements)

按 id,name,xpath,link_text,partial_link_text,tag_name,class_name,css_selector定位 UI 元素

单个元素查找:定位的元素有多个,会返回第一个元素,找不到报错

find_element_by_name:name属性,
find_element_by_id:
find_element_by_xpath:
find_element_by_link_text:文本
find_element_by_partial_link_text:部分文本
find_element_by_tag_name:标签名
find_element_by_class_name:类名
find_element_by_css_selector:选择器

多个元素查找:返回列表,不存在返回空列表,不会报错
find_elements_by_name:
find_elements_by_id
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

获取元素属性值:
get_attribute('class'),get_attribute('href')

获取文本值:
可见元素文本:text

获取 ID,位置,标签名
id
location:位置
tag_name:标签名
size:尺寸,宽高

 执行 JavaScript:
这是一个非常有用的方法,这里就可以直接调用 js 方法来实现一些操作,
下面的例子是通过登录知乎然后通过 js 翻到页面底部,并弹框提示
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
print(browser.page_source)
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

 截屏和超长截屏

from selenium import webdriver

"1.截图"
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://blog.csdn.net/Kwoky/article/details/80285201")
driver.save_screenshot("./images/app2.png")

"2.超长截图"
driver1 = webdriver.PhantomJS()
driver1.maximize_window()
driver1.get("https://blog.csdn.net/Kwoky/article/details/80285201")
driver1.save_screenshot("./images/app1.png")

 爬虫--selenium,PhantomJS

Cookies

get_cookies()
delete_all_cookes()
add_cookie()


获取页面每个 Cookies 值,用法如下
for cookie in driver.get_cookies():
 print "%s -> %s" % (cookie['name'], cookie['value'])
删除 Cookies:
# By name
driver.delete_cookie("CookieName")
# all
driver.delete_all_cookies()

范例-获取 cookie

from selenium import webdriver
driver = webdriver.Chrome()
# driver.get("http://member.rltxtest.xyz/login/login.html")
driver.get("http://www.youdao.com")
# 获取 cookie 信息
cookies = driver.get_cookies()
# 打印获取的 cookies 信息
print(cookies)
driver.quit()

范例-添加 cookie

from selenium import webdriver
driver = webdriver.Chrome()
# driver.get("http://member.rltxtest.xyz/login/login.html")
driver.get ("http://www.youdao.com")
# 向 cookie 中 name 和 value 中添加回话信息,
driver.add_cookie({'name': 'key-aaaaaaa','value': 'value-bbbbb'})
# 遍历 cookie 中 name 和 value 信息并打印对应的信息,并包括添加对应的信息
for cookie in driver.get_cookies():
 print("%s->%s" % (cookie['name'], cookie['value']))
driver.quit ()

 

自动化交互

鼠标动作链:
在页面上模拟一些鼠标操作,比如双击、右击、拖拽甚至按住丌劢等,可以通过导入ActionChains 类实现

ActionChains 执行原理:

当调用ActionChains的方法时,丌会立即执行,而是会将所有的操作按顺序存放在一个队列里,
当你调用 perform()方法时,队列中的时间会依次执行。
有两种写法本质是一样的,ActionChains 都会按照顺序执行所有的操作

ActionChains 方法列表

click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键                                                                                  double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左
上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

html 元素操作

窗口最大化:driver.maximize_window()

下拉框的处理:

select_by_index(index) ——通过选项的顺序,第一个为 0
select_by_value(value) ——通过 value 属性
select_by_visible_text(text) ——通过选项可见文本

全部取消选择:select.deselect_all()

Select 提供了相应属性,选择了选项之后,查看所选项:

options ——提供所有的选项的列表,其中都是选项的 WebElement 元素
all_selected_options ——提供所有被选中的选项的列表,其中也均为选项的 WebElement 元素
first_selected_option ——提供第一个被选中的选项,也是下拉框的默认值

弹窗处理:

当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示戒者获取提示信息方法如下:
alert = driver.switch_to_alert()
用 switch_to_alert 先定位到弹窗,然后使用一系列方法来操作:
accept - 点击【确认】按钮
dismiss - 点击【取消】按钮(如有按钮)
send_keys - 输入内容(如有输入框)

页面切换:

一个浏览器肯定会有很多窗口,切换窗口的方法如下:
driver.switch_to.window("this is window name")
也可以使用 window_handles 方法来获取每个窗口的操作对象。例如:
for handle in driver.window_handles:
           driver.switch_to_window(handle)

操作页面的前迚和后退功能:
driver.forward() #前进
driver.back() # 后退

选项卡管理:

通过执行 js 命令实现新开选项卡 window.open()
丌同的选项卡是存在列表里 browser.window_handles
通过 browser.window_handles[0]就可以操作第一个选项卡

相关文章: