博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫 selenium
阅读量:2240 次
发布时间:2019-05-09

本文共 11454 字,大约阅读时间需要 38 分钟。

selenium

一、声明浏览器对象

二、打开网页,进入百度

三、查找元素

四、获取元素信息,获取属性

五、元素的交互

六、下拉进度条

七、动作链

八、等待

九、浏览器的前进的后退

十、选项卡管理

十一、异常处理

十二、常用键的操作

十三、登录操作

十四、爬取京东商品,爬取一页

十五、爬取多页

十六、无界面模式

十七、股票代码抓取

一、声明浏览器对象

#声明浏览器对象import osos.chdir(r'D:\数分学习资料\python\爬虫')  from selenium import webdriverbrowser=webdriver.Chrome()#会打开浏览器browser.maximize_window()

二、打开网页,进入百度

#打开网页,进入百度import timeimport osos.chdir(r'D:\数分学习资料\python\爬虫')from selenium import webdriverbrowser=webdriver.Chrome()#会打开浏览器browser.get('https://www.baidu.com/')browser.maximize_window()print(browser.page_source)#输出网页源码time.sleep(5)browser.close()#关闭浏览器

三、查找元素

import timeimport osos.chdir(r'D:\数分学习资料\python\爬虫')from selenium import webdriverbrowser=webdriver.Chrome()#会打开浏览器browser.get('https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_48e850d4018f41318337c62af7d885ba')input=browser.find_element_by_id('key')#input.send_keys('手机')browser.find_element_by_class_name('button').click()#回车time.sleep(10)browser.close()#关闭浏览器#input=browser.find_element_by_name("q")#根据name#input_second=browser.find_element_by_css_selector("#q")#根据css获取,点:类名,#:id名#input_third=browser.find_element(By.ID,"q")#根据id获取

四、获取元素信息,获取属性

#获取元素信息,获取属性from selenium import webdriverbrowser=webdriver.Chrome()url="https://www.zhihu.com/explore"browser.get(url)logo=browser.find_element_by_id("zh-top-link-logo")print(logo)print(logo.get_attribute("class"))print(logo.text)print(logo.id) #idprint(logo.location) #位置print(logo.tag_name) #标签名print(logo.size) #大小

五、元素的交互

#元素的交互import timeimport osos.chdir(r'D:\数分学习资料\python\爬虫')from selenium import webdriverbrowser=webdriver.Chrome()#会打开浏览器browser.get('https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_48e850d4018f41318337c62af7d885ba')input=browser.find_element_by_id('key')#input.send_keys('连衣裙')input.clear()#清空input.send_keys('手机')browser.find_element_by_class_name('button').click()#回车time.sleep(10)browser.close()#关闭浏览器

六、下拉进度条

#下拉进度条import timeimport osos.chdir(r'D:\数分学习资料\python\爬虫')from selenium import webdriverbrowser=webdriver.Chrome()#会打开浏览器browser.get('https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_48e850d4018f41318337c62af7d885ba')input=browser.find_element_by_id('key')#input.send_keys('连衣裙')time.sleep(2)input.clear()input.send_keys('手机')browser.find_element_by_class_name('button').click()#回车browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')time.sleep(2)browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')time.sleep(2)browser.execute_script('window.scrollTo(0,0)')browser.close()#关闭浏览器

七、动作链

##动作链from selenium import webdriverfrom selenium.webdriver import ActionChainsimport timefrom selenium.webdriver.common.alert import Alertbrowser=webdriver.Chrome()url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"browser.get(url) browser.switch_to.frame("iframeResult")#切换到目标元素所在的framesource=browser.find_element_by_id("draggable")#确定拖拽目标的起点target=browser.find_element_by_id("droppable")#确定拖拽目标的终点actions=ActionChains(browser) #形成动作链actions.drag_and_drop(source,target)#调用drag and drop方法actions.perform()#执行

八、等待

#等待#隐式等待from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')browser.implicitly_wait(3)#等待固定时间input = browser.find_element_by_class_name('zu-button-more')print(input)#显式等待from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECbrowser = webdriver.Chrome()browser.get('https://www.taobao.com/')wait = WebDriverWait(browser,10)#最多等待十秒input = wait.until(EC.presence_of_element_located((By.ID, 'q')))button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))print(input, button)

九、浏览器的前进的后退

#浏览器的前进,后退,刷新from selenium import webdriverimport timebrowser=webdriver.Chrome()browser.get("https://www.taobao.com")time.sleep(2)browser.get("https://www.baidu.com")browser.back()#后退time.sleep(2)browser.forward()#前进time.sleep(3)browser.refresh()#刷新time.sleep(3)browser.close()

十、选项卡管理

#选项卡管理from selenium import webdriverimport timebrowser=webdriver.Chrome()browser.get("https://www.zhihu.com/explore")browser.execute_script("window.open()")print(browser.window_handles)browser.switch_to_window(browser.window_handles[1])browser.get("https://www.taobao.com")time.sleep(1)browser.switch_to_window(browser.window_handles[0])browser.get("https://www.jd.com")browser.close()  # 关选项卡0time.sleep(1)browser.switch_to_window(browser.window_handles[0])browser.close()

十一、异常处理

#异常处理from selenium import webdriverfrom selenium.common.exceptions import TimeoutException,NoSuchElementExceptionbrowser=webdriver.Chrome()try:    browser.get("https://www.zhihu.com/explore")except TimeoutException:    print("Time out")try:    browser.find_element_by_id("hello")except NoSuchElementException:    print("No Element")finally:    browser.close()

十二、常用键的操作

#常用键的操作from selenium.webdriver.common.keys import Keysimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")time.sleep(3)driver.find_element_by_id('kw').send_keys('selenium')  #在搜索框中输入"selenium"time.sleep(3)driver.find_element_by_id('kw').send_keys(Keys.SPACE)  #输入空格键time.sleep(3)driver.find_element_by_id('kw').send_keys('python')  #在搜索框中输入"python"time.sleep(3)driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')  #输入Control+a模拟全选time.sleep(3)driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'c')  #输入Control+c模拟复制time.sleep(3)driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')  #输入Control+v模拟粘贴time.sleep(3)driver.find_element_by_id('kw').send_keys(Keys.ENTER)  #输入回车代替点击搜索按钮time.sleep(3)driver.close()#下面是一些常用的键盘事件:# Keys.BACK_SPACE:回退键(BackSpace)# Keys.TAB:制表键(Tab)# Keys.ENTER:回车键(Enter)# Keys.SHIFT:大小写转换键(Shift)# Keys.CONTROL:Control键(Ctrl)# Keys.ALT:ALT键(Alt)# Keys.ESCAPE:返回键(Esc)# Keys.SPACE:空格键(Space)# Keys.PAGE_UP:翻页键上(Page Up)# Keys.PAGE_DOWN:翻页键下(Page Down)# Keys.END:行尾键(End)# Keys.HOME:行首键(Home)# Keys.LEFT:方向键左(Left)# Keys.UP:方向键上(Up)# Keys.RIGHT:方向键右(Right)# Keys.DOWN:方向键下(Down)# Keys.INSERT:插入键(Insert)# DELETE:删除键(Delete)# NUMPAD0 ~ NUMPAD9:数字键1-9# F1 ~ F12:F1 - F12键# (Keys.CONTROL, ‘a’):组合键Control+a,全选# (Keys.CONTROL, ‘c’):组合键Control+c,复制# (Keys.CONTROL, ‘x’):组合键Control+x,剪切# (Keys.CONTROL, ‘v’):组合键Control+v,粘贴

十三、登录操作

browser=webdriver.Chrome()url='https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F%3Fcu%3Dtrue%26utm_source%3Dbaidu-pinzhuan%26utm_medium%3Dcpc%26utm_campaign%3Dt_288551095_baidupinzhuan%26utm_term%3D0f3d30c8dba7459bb52f2eb5eba8ac7d_0_5c595fde6f6743c1a1878bfeaf4f215f'browser.get(url)time.sleep(3)button=browser.find_element_by_link_text('账户登录').click()browser.find_element_by_id('loginname').send_keys('')#自己的用户名time.sleep(2)browser.find_element_by_id("nloginpwd").send_keys('')#密码time.sleep(2)browser.find_element_by_id('loginsubmit').click()#登录

十四、爬取京东商品,爬取一页

#完整代码,爬取一页from bs4 import BeautifulSoupbrowser=webdriver.Chrome()url='https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=7006616bd0b543cd86d45af18335c009'browser.get(url)browser.maximize_window()input=browser.find_element_by_id('key')#input.clear()input.send_keys('手机')browser.find_element_by_class_name('button').click()#回车browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')time.sleep(5)browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')time.sleep(10)html=browser.page_sourcesoup = BeautifulSoup(html, 'html.parser')#内置的标准库进行网页的解析itemslist=[]items=soup.find_all('li',class_='gl-item')for item in items:    it=[]    it.append(item.find('div',class_='p-name p-name-type-2').find('em').text)    it.append(item.find('div',class_='p-price').find('i').text)    it.append(item.find('span',class_='J_im_icon').text)    itemslist.append(it)df=pd.DataFrame(itemslist,columns=['商品名称','价格','店家']).set_index('商品名称')df

十五、爬取多页

import pandas as pdfrom bs4 import BeautifulSoupbrowser=webdriver.Chrome()url='https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=7006616bd0b543cd86d45af18335c009'browser.get(url)browser.maximize_window()input=browser.find_element_by_id('key')#input.clear()input.send_keys('手机')browser.find_element_by_class_name('button').click()#回车data=pd.DataFrame()for i in range(5):    print('正在爬取第%d页'%i)    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')    time.sleep(5)    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')    time.sleep(5)    html=browser.page_source    soup = BeautifulSoup(html, 'html.parser')#内置的标准库进行网页的解析    itemslist=[]    items=soup.find_all('li',class_='gl-item')    for item in items:        it=[]        it.append(item.find('div',class_='p-name p-name-type-2').find('em').text)#商品名称        it.append(item.find('div',class_='p-price').find('i').text)#价格        if item.find('span',class_='J_im_icon')==None:  #店家名称            it.append('京东自营')        else:            it.append(item.find('span',class_='J_im_icon').text)        itemslist.append(it)    df=pd.DataFrame(itemslist)    data=pd.concat([data,df])    browser.execute_script('window.scrollTo(0,10000)')    time.sleep(5)    browser.find_element_by_class_name('pn-next').click()    time.sleep(5)data.columns=['商品名称','价格','店家']data=data.set_index('商品名称')

十六、无界面模式

from selenium import webdriverimport osos.chdir(r'D:\数分学习资料\python\爬虫')import pandas as pdimport timefrom bs4 import BeautifulSoupchrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')#无界面browser = webdriver.Chrome(chrome_options=chrome_options)url='https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=7006616bd0b543cd86d45af18335c009'browser.get(url)input=browser.find_element_by_id('key')#input.clear()input.send_keys('手机')browser.find_element_by_class_name('button').click()#回车data=pd.DataFrame()for i in range(5):    print('正在爬取第%d页'%i)    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')    time.sleep(5)    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')    time.sleep(10)    html=browser.page_source    soup = BeautifulSoup(html, 'html.parser')#内置的标准库进行网页的解析    itemslist=[]    items=soup.find_all('li',class_='gl-item')    for item in items:        it=[]        it.append(item.find('div',class_='p-name p-name-type-2').find('em').text)#商品名称        it.append(item.find('div',class_='p-price').find('i').text)#价格        if item.find('span',class_='J_im_icon')==None:  #店家名称            it.append('京东自营')        else:            it.append(item.find('span',class_='J_im_icon').text)        itemslist.append(it)    df=pd.DataFrame(itemslist)    data=pd.concat([data,df])    browser.execute_script('window.scrollTo(0,10000)')    time.sleep(5)    browser.find_element_by_class_name('pn-next').click()    time.sleep(5)print('爬取完毕')data.columns=['商品名称','价格','店家']data=data.set_index('商品名称')

十七、股票代码抓取

# 股票数据import tushare as tsdf=ts.get_hist_data('600848')df# 股票数据 设置时间段import tushare as tsts.get_hist_data('600848',start='2017-01-05',end='2017-02-09')#新闻数据ts.get_latest_news(top=5,show_content=True) #显示最新5条新闻,并打印出新闻内容#电影票房df = ts.realtime_boxoffice()df

转载地址:http://ixqbb.baihongyu.com/

你可能感兴趣的文章
分布式系统中的幂等性的理解
查看>>
spring的注解开发中的常用注解(一)------@bean @Configuration @ComponentScan @Import @Scope @Lazy
查看>>
(五)alin’s mysql学习笔记----索引性能分析
查看>>
Spring中使用@Transactional注解进行事务管理的时候只有应用到 public 方法才有效
查看>>
springboot整合rabbitmq及rabbitmq的简单入门
查看>>
mysql事务和隔离级别笔记
查看>>
事务的传播属性(有坑点)自调用失效学习笔记
查看>>
REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
查看>>
动态代理实现AOP
查看>>
23种常见的java设计模式
查看>>
ThreadLocal 那点事儿(续集)
查看>>
阳台做成榻榻米 阳台做成书房
查看>>
深入分析java线程池的实现原理
查看>>
mybatis中"#"和"$"的区别
查看>>
Hibernate与MyBatis区别
查看>>
如何禁用Eclipse的Validating
查看>>
据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
查看>>
SpringMVC学习笔记2
查看>>
Oracle知识点连载(一)
查看>>
Oracle知识点连载(二)
查看>>