1. 程式人生 > >selenium獲取動態網站資料

selenium獲取動態網站資料

一、安裝

pip install selenium

二、下載瀏覽器驅動

谷歌瀏覽器驅動下載地址:http://npm.taobao.org/mirrors/chromedriver/
火狐瀏覽器驅動下載地址:http://npm.taobao.org/mirrors/geckodriver/
檢視谷歌瀏覽器版本:幫助 --> 關於 Google Chrome
在這裡插入圖片描述

三、爬取今日頭條資料

進入到今日頭條主頁,點選 科技 ,到對應的頁面爬取標題和url,但是這個頁面需要將滾輪滑倒底部,才能載入下面的內容,所有需要執行js程式碼

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from selenium import webdriver 
from bs4 import BeautifulSoup
import time,xlwt

#1、模擬瀏覽器找到訪問位置
driver = webdriver.Chrome()   #例項化一個初始瀏覽器
url = "https://www.toutiao.com"
driver.get(url=url)          #以get方式傳送一個url
driver.implicitly_wait(10)   #隱形等待,確保節點都完全加載出來
driver.find_element_by_link_text('科技').click()   #獲取a標籤超連結文字
driver.implicitly_wait(10)

#2、獲取原始碼,標識滾動條位置的程式碼
for i in range(3):
    js = 'var q = document.documentElement.scrollTop=' + str(i*3000)
    driver.execute_script(js)   #執行js程式碼
    time.sleep(2)

html_doc = driver.page_source  #獲取網頁原始碼

#3、解析內容
data = []
soup = BeautifulSoup(html_doc,'html.parser')
res = soup.select('.wcommonFeed ul li .rbox-inner .title-box a')
for i in range(len(res)):
    if 'http' not in res[i]['href']:
        data.append([res[i].text, url + res[i]['href']])
    else:
        data.append([res[i].text, res[i]['href']])


#4、將資料寫入到excel中
newTable = 'test2018.xls'
book =  xlwt.Workbook(encoding='utf-8')   #建立excle表格
boot_sheet = book.add_sheet('今日頭條')    #新增工作薄

headData = ['標題','url地址']
#寫入標題
for colnum in range(2):   # 2為幾列
    boot_sheet.write(0,colnum,headData[colnum])

#寫入內容
index = 1
for content in range(len(data)):
    for colnum in range(2):
        boot_sheet.write(index,colnum,data[content][colnum])
    index += 1
book.save(newTable)

driver.quit()   #退出

效果圖:
在這裡插入圖片描述

二、實現新浪部落格的動態登陸

輸入使用者名稱和密碼後爬取對應的頁面內容

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from selenium import webdriver
import time

browser = webdriver.Chrome()   #例項化一個初始瀏覽器
browser.get('http://login.sina.com.cn')   # 訪問網站

elem_user = browser.find_element_by_name('username')  # 定位到使用者名稱元素
elem_user.send_keys('username')  # 賬號使用者名稱
elem_pwd = browser.find_element_by_name("password")
elem_pwd.send_keys('password')  # 賬號密碼
elem_sub = browser.find_element_by_xpath("//input[@class='W_btn_a btn_34px']")  # 定位到提交元素
elem_sub.click()  # 點選登陸
time.sleep(10)  # 等待10s

current_url = browser.current_url  # 當前頁面的url
print(current_url)

# 跳轉到要爬取的頁面
browser.get('http://k.sina.com.cn/article_5807684875_m15a2a3d0b00100i7hw.html?cre=mysinapc&mod=f&loc=11&r=15&doct=0&rfunc=47')  
time.sleep(10)
html = browser.page_source  # 獲得當前頁面的html字串
print(html)

browser.quit()

詳情請參考官網地址:https://selenium-python.readthedocs.io