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()
四、获取元素信息,获取属性
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)
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")
source=browser.find_element_by_id("draggable")
target=browser.find_element_by_id("droppable")
actions=ActionChains(browser)
actions.drag_and_drop(source,target)
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()
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')
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')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'c')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.ENTER)
time.sleep(3)
driver.close()
十三、登录操作
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)
df = ts.realtime_boxoffice()
df