爬虫入门到进阶(六)

Selenium 与 PhantomJS

1.selenium介绍

介绍:

1.selenium是一个web自动化测试用的框架. 程序员可以通过代码实现对浏览器的控制, 比如打开网页, 点 击网页中的元素, 实现鼠标滚动等操作.
2.它支持多款浏览器, 如谷歌浏览器, 火狐浏览器等等, 当然也支持无头浏览器.

目的:

在爬取数据的过程中, 经常遇到动态数据加载, 一般动态数据加载有两种, 一种通过ajax请求加载数据, 另 一种通过js代码加载动态数据. selenium可以模拟人操作真实浏览器, 获取加载完成的页面数据
ajax:
url有规律且未加密, 直接构建url连接请求
url加密过无法破解规律 --> selenium
js动态数据加载 --> selenium

2.selenium安装

三要素: 浏览器, 驱动程序, selenium框架 
	浏览器: 推荐谷歌浏览器, 标准稳定版本 
	驱动程序:http://chromedriver.storage.googleapis.com/index.html 
	pip install selenium 
	# 测试: 
	from selenium import webdriver 
	browser = webdriver.Chrome('./chromedriver.exe') # 将驱动放在脚本所在的文件夹 
	browser.get('https://www.baidu.com')

3.selenium常用操作

# 实例化浏览器对象: 
from selenium import webdriver 
browser = webdriver.Chrome('driverpath') 
# 发送get请求: browser.get('https://www.baidu.com')
4.qq空间模拟登陆
5.PhantomJS浏览器使用
# 获取页面元素: 
find_element_by_id:根据元素的id find_element_by_name:根据元素的name属性 find_element_by_xpath:根据xpath表达式 find_element_by_class_name:根据class的值 find_element_by_css_selector:根据css选择器 
# 节点交互操作: 
click(): 点击 
send_keys(): 输入内容 
clear(): 清空操作 
execute_script(js): 执行指定的js代码 
# JS代码: window.scrollTo(0, document.body.scrollHeight)可以模拟鼠标滚动一屏高度 
quit(): 退出浏览器 
# 获取网页的数据: 
browser.page_source ---> str类型 
# frame 
switch_to.frame('frameid')

4.qq空间模拟登陆

from selenium import webdriver 
import time 
# 实例化浏览器对象 
browser = webdriver.Chrome('./chromedriver.exe') 
# 百度图片抓取: 
import time import requests from selenium import webdriver from bs4 
import BeautifulSoup from urllib 
import request 
# 1.实例化浏览器对象 
browser = webdriver.Chrome('./chromedriver.exe') 
# 2.向服务器发起请求 
browser.get('http://image.baidu.com/') 
time.sleep(2)

5.PhantomJS浏览器使用

# PhantomJS下载及配置环境变量 
- 下载, 直接解压 
- 将解压文件的bin目录添加至环境变量 
# PhantomJS无界面浏览器 
from selenium import webdriver 
browser = webdriver.PhantomJS() 
browser.get('https://www.baidu.com') 
with open('baidu_phantomjs.html', 'w', encoding="utf-8") as f: 
f.write(browser.page_source) 

# 谷歌无头浏览器 
from selenium import webdriver 
from selenium.webdriver.chrome.options 
import Options 
chrome_options = Options() 
chrome_options.add_argument('--headless') 
chrome_options.add_argument('--disable-gpu')
 browser = webdriver.Chrome(chrome_options=chrome_options) browser.get("https://www.baidu.com") 
 print(browser.page_source) 
 with open('baidu_headerless.html', 'w', encoding='utf-8') as f:
  	f.write(browser.page_source)

5.图片懒加载

import requests 
from lxml import etree 
from urllib 
import request 
import urllib 
url = 'http://sc.chinaz.com/tupian/index.html' 
headers = { "USer-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' }
res = requests.get(url=url, headers=headers) res.encoding = 'utf-8' 
# print(res.text) 
tree = etree.HTML(res.text) 
src_list = tree.xpath('//div[contains(@class,"box")]/div/a/img/@src2') 
for url_img in src_list: 
request.urlretrieve(url_img,'%s.jpg'%src_list.index(url_img)) 
from selenium import webdriver 
import time 
browser = webdriver.Chrome('./chromedriver.exe') browser.get('http://image.baidu.com/') 
search = browser.find_element_by_id('kw') search.send_keys('安琪拉') 
button = browser.find_element_by_class_name('s_search') button.click() 
for i in range(3):
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') 
time.sleep(5) 
text = browser.page_source with open('baidu_pic.html', 'w', encoding="utf-8") as f: 
f.write(text) 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(open('./baidu_pic.html', 'r', encoding='utf-8'), 'lxml') 
li_list = soup.select('.imgpage ul li') 
for url_img in li_list: 
	url_img = url_img['data-objurl'] 		print(url_img) 
	# 作业:雪球网首页, 抓取推荐咨询的每一条标题与详情页链接(使用selenium模拟鼠标向下滑动) https://xueqiu.com/ 
	实例化浏览器对象: 
	from selenium import webdriver 
	browser = webdriver.Chrome('driverpath') 
	# 发送get请求: 
	browser.get('url') 
	# 获取页面元素:
	 find_element_by_id 
	 find_element_by_xpath 	
	 find_element_by_name 
	 find_element_by_class_name 
	 find_element_by_css_selector 
	 # 交互操作: 
	 click(): 点击 
	 send_keys(): 输入内容 
	 clear(): 清空操作 
	 execute_script(js): 
	 执行指定的js代码 
	 # JS代码: 
	 window.scrollTo(0, document.body.scrollHeight)可以模拟鼠标滚动一屏高度 
	 quit(): 退出浏览器 
	 # 获取网页的数据: 
	 browser.page_source ---> str类型

你可能感兴趣的:(爬虫,爬虫,python)