爬虫 selenium

selenium

一、声明浏览器对象
二、打开网页,进入百度
三、查找元素
四、获取元素信息,获取属性
五、元素的交互
六、下拉进度条
七、动作链
八、等待
九、浏览器的前进的后退
十、选项卡管理
十一、异常处理
十二、常用键的操作
十三、登录操作
十四、爬取京东商品,爬取一页
十五、爬取多页
十六、无界面模式
十七、股票代码抓取
一、声明浏览器对象
#声明浏览器对象
import os
os.chdir(r'D:\数分学习资料\python\爬虫')  
from selenium import webdriver
browser=webdriver.Chrome()#会打开浏览器
browser.maximize_window()
二、打开网页,进入百度
#打开网页,进入百度
import time
import os
os.chdir(r'D:\数分学习资料\python\爬虫')
from selenium import webdriver
browser=webdriver.Chrome()#会打开浏览器
browser.get('https://www.baidu.com/')
browser.maximize_window()
print(browser.page_source)#输出网页源码
time.sleep(5)
browser.close()#关闭浏览器
三、查找元素
import time
import os
os.chdir(r'D:\数分学习资料\python\爬虫')
from selenium import webdriver
browser=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 webdriver
browser=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) #id
print(logo.location) #位置
print(logo.tag_name) #标签名
print(logo.size) #大小
五、元素的交互
#元素的交互
import time
import os
os.chdir(r'D:\数分学习资料\python\爬虫')
from selenium import webdriver
browser=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 time
import os
os.chdir(r'D:\数分学习资料\python\爬虫')
from selenium import webdriver
browser=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 webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.common.alert import Alert
browser=webdriver.Chrome()
url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url) 
browser.switch_to.frame("iframeResult")#切换到目标元素所在的frame
source=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 webdriver
browser = 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 webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = 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 webdriver
import time
browser=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 webdriver
import time
browser=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()  # 关选项卡0
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.close()
十一、异常处理
#异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException
browser=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 Keys
import time
driver = 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%2F2.zoppoz.workers.dev%3A443%2Fhttps%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 BeautifulSoup
browser=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_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)
    it.append(item.find('span',class_='J_im_icon').text)
    itemslist.append(it)
df=pd.DataFrame(itemslist,columns=['商品名称','价格','店家']).set_index('商品名称')
df
十五、爬取多页
import pandas as pd
from bs4 import BeautifulSoup
browser=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 webdriver
import os
os.chdir(r'D:\数分学习资料\python\爬虫')
import pandas as pd
import time
from bs4 import BeautifulSoup
chrome_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 ts
df=ts.get_hist_data('600848')
df
# 股票数据 设置时间段
import tushare as ts
ts.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值