python爬虫实战笔记---selenium爬取QQ空间说说并存至本地(上)
来源:互联网 发布:java堆栈溢出怎么解决 编辑:程序博客网 时间:2024/05/23 16:18
Selenium是一个自动化测试工具,支持驱动多种浏览器,爬虫中主要用来解决JavaScript渲染问题,跳转,输入啦,点击,下拉等等操作。当无法从网页中静态获取内容时,则可以用这个工具。可以用pip完成安装。
代码实例:
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.Chrome()#定义一个浏览器驱动try: browser.get("http://www.baidu.com") #模拟输入一个url input = browser.find_element_by_id('kw') input.send_keys("Python") input.send_keys(Keys.ENTER) wait = WebDriverWait(browser,10) wait.until(EC.presence_of_all_elements_located((By.ID,"content_left")))#等待id为
content_left的元素被加载进来
print(browser.current_url) print(browser.get_cookie()) print(browser.page_source)finally: browser.close()#关闭浏览器,若不关闭,浏览器则会在后台一直运行下去
接下来,让我们对Selenium来一波彻底的认知~~~
声明浏览器对象:
from selenium import webdriverbrowser = webdriver.Chrome()browser = webdriver.PhantomJS
访问页面:
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('http://www.baidu.com')browser.close()
查找元素:
单个元素:
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('http://www.taobao.com')
#以下的三种方式将会得到同样的结果,都是根据id得到的淘宝网搜索框input_first = browser.find_element_by_id('q')input_second = browser.find_element_by_css_selector('#q')input_third = browser.find_element_by_xpath('//*[@id="q"]')browser.close()
常用的查找方法还有:
find_element_by_name
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
还有一种通用的查找方式:
例如:
from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get('http://www.taobao.com')input_first = browser.find_element(By.ID,'q')print(input_first)browser.close()节省了代码,且将得到与前者同样的效果
多个元素:
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('http://www.taobao.com')lis = browser.find_elements_by_css_selector('.service-bd li')print(lis)browser.close()
那么,它得到的就是淘宝网首页的导航条的一个列表,如下:常用的查找方法还有:
find_elements_by_name
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
当然,查找多个元素的操作也有其简化的通用写法,即
from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get('http://www.taobao.com')lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')print(lis)browser.close()
元素交互操作
对获取的元素调用交互方法:
from selenium import webdriverimport timebrowser = webdriver.Chrome()browser.get('http://www.taobao.com')input = browser.find_element_by_id('q')input.send_keys('iPhone')time.sleep(1)input.clear()input.send_keys("iPid")button = browser.find_element_by_class_name('btn-search')button.click()browser.close()这样就可以释放你的双手,让程序自动驱动浏览器去查找淘宝商品咯
交互动作
这个交互动作与元素的交互动作是不同的,它是将动作附加到动作链中串行执行,需要引入一个ActionChains库
下面的实例用于切换frame
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"browser.get(url)browser.switch_to_frame('ifameResult')source = browser.find_elements_by_css_selector('#draggable')target = browser.find_elements_by_css_selector('#droppable')actions = ActionChains(browser)#声明一个交互动作actions.drag_and_drop(source,target) #执行拖拽actions.perform()
除了drag_and_drop,常用的交互动作还有,click_and_hold(on_element=None) 按住不动
double_click(on_element-None)双击
执行JavaScript
from selenium import webdriverbrowser = webdriver.Chrome()browser.get("http://www.zhihu.com/explore")
#将动作拖拽到窗口底部browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")browser.execute_script('alert("To Buttom")')
获取元素信息
获取属性:
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = "http://www.zhihu.com/explore"browser.get(url)logo = browser.find_element_by_id('zhihu-top-link-logo')print(logo)print(logo.get_attribute('class'))
获取文本值:
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = "http://www.zhihu.com/explore"browser.get(url)input = browser.find_element_by_class_name('zu-top-add-question')print(input.text)
获取id,位置,标签名,大小
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = "http://www.zhihu.com/explore"browser.get(url)input = browser.find_element_by_class_name('zu-top-add-question')print(input.id)print(input.location)print(input.tag_name)print(input.size)
output:0.5051284357419945-1
{'x': 758, 'y': 7} 在浏览器中的位置
button
{'height': 32, 'width': 66} 浏览器占的像素大小
Frame
frame即碎片,组成整张网页的一部分,是网页中常见的一种组件,通常可以看作是一个独立网页,下面用一个例子来说明如何切换frame,即怎样切换到子元素的frame,然后再切换回来
import timefrom selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionbrowser = webdriver.Chrome()url = "http://www.runoob.com/try/try/try.php?filename=jueryui-api-droppable"browser.get(url)browser.switch_to_frame("iframeResult")sourse = browser.find_elements_by_css_selector("#draggable")print(sourse)try: logo = browser.find_element_by_class_name("logo")except NoSuchElementException: print('No logo')browser.switch_to_parent_frame()logo = browser.find_element_by_class_name('logo')print(logo.text)
前进后退
例
import timefrom selenium import webdriverbrowser = webdriver.Chrome()browser.get("http://www.baidu.com")browser.get("http://www.taobao.com")browser.get("http://www.python.com")browser.back()time.sleep(1)browser.forward()browser.close()
依次请求三个页面,然后后退一步,前进一步Cookies
from selenium import webdriverbrowser = webdriver.Chrome()browser.get("http://www.zhihu.com/explore")print(browser.get_cookie())browser.add_cookie({'name':'name','domain':'www.zhihu.com','value':'germey'})print(browser.get_cookie())browser.delete_all_cookies()print(browser.get_cookie())
选项卡管理
import timefrom selenium import webdriverbrowser = webdriver.Chrome()browser.get("http://www.baidu.com")browser.execute_script('window.open()')print(browser.window_handles)browser.switch_to_window(browser.window_handles[1])browser.get("http://www.taobao.com")time.sleep(1)browser.switch_to_window(browser.window_handles[0])browser.get('http://python.org')
PhantomJS是一个基于Webkit的Headless的web引擎,即相当于一个没有界面的浏览器,在做爬虫时比Chrome更节省内存,且运行较快。
关于Cookies的使用
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据
阅读全文
0 0
- python爬虫实战笔记---selenium爬取QQ空间说说并存至本地(上)
- python爬虫实战笔记---selenium爬取QQ空间说说并存至本地
- Python爬虫入门实战系列(一)--爬取网络小说并存放至txt文件
- Python爬虫(三):爬取猫眼电影网经典电影TOP100信息并存入本地Markdown文件(上)
- 一.selenium爬取好友QQ空间日志说说
- python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb
- Python爬虫QQ空间好友说说
- Python爬取QQ空间日志及说说
- Python爬虫(三):爬取猫眼电影网经典电影TOP100信息并存入本地Markdown文件(下)
- 爬取QQ空间数据<Python爬虫入门>
- 实战爬虫-爬取红袖添香并存入数据库
- python3 [爬虫入门实战] 爬虫之selenium 模拟QQ登陆抓取好友说说内容(暂留)
- 【爬虫】python selenium 爬取数据
- Python爬虫-Selenium爬取淘宝美食
- Python爬虫系列(四)(简单)Dota排行榜爬取,并存入Excel表格
- 【开源】爬取QQ空间说说及简易数据分析
- QQ空间"说说"分析 Python
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
- hdu 5950 数学公式 + 矩阵快速幂
- php验证码的封装和使用
- [DeeplearningAI笔记]神经网络与深度学习3.2_3.11(激活函数)浅层神经网络
- 秒杀系统并发应对的设计思路小结
- 编写程序数一下 1到 100 的所有整数中出现多少次数字9。
- python爬虫实战笔记---selenium爬取QQ空间说说并存至本地(上)
- java---策略模式
- 跟我撩fastjson-第一章:认识fastjson
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- [bzoj2427][HAOI2010]软件安装(树形dp+tarjan)
- nodejs中流(stream)的理解
- linux 下时间字符串和time_t类型之间的相互转化
- Linux 参看cuda 及 显卡
- 模板的分离编译问题