在Python中使用Selenium獲取QQ空間好友說說

from bs4 import BeautifulSoup

from selenium import webdriver

import time

# #使用Selenium的webdriver例項化一個瀏覽器物件,在這裡使用Phantomjs

# driver = webdriver。PhantomJS(executable_path=r“D:\phantomjs-2。1。1-windows\bin\phantomjs。exe”)

# #設定Phantomjs視窗最大化

# driver。maximize_window()

# 登入QQ空間

def get_shuoshuo(qq):

chromedriver = r“D:\soft\chromedriver_win32\chromedriver。exe”

driver = webdriver。Chrome(chromedriver)

#使用get()方法開啟待抓取的URL

driver。get(‘http://user。qzone。qq。com/{}/311’。format(qq))

time。sleep(5)

#等待5秒後,判斷頁面是否需要登入,透過查詢頁面是否有相應的DIV的id來判斷

try:

driver。find_element_by_id(‘login_div’)

a = True

except:

a = False

if a == True:

#如果頁面存在登入的DIV,則模擬登入

driver。switch_to。frame(‘login_frame’)

driver。find_element_by_id(‘switcher_plogin’)。click()

driver。find_element_by_id(‘u’)。clear() # 選擇使用者名稱框

driver。find_element_by_id(‘u’)。send_keys(‘QQ號碼’)

driver。find_element_by_id(‘p’)。clear()

driver。find_element_by_id(‘p’)。send_keys(‘QQ密碼’)

driver。find_element_by_id(‘login_button’)。click()

time。sleep(3)

driver。implicitly_wait(3)

#判斷好友空間是否設定了許可權,透過判斷是否存在元素ID:QM_OwnerInfo_Icon

try:

driver。find_element_by_id(‘QM_OwnerInfo_Icon’)

b = True

except:

b = False

#如果有許可權能夠訪問到說說頁面,那麼定位元素和資料,並解析

if b == True:

driver。switch_to。frame(‘app_canvas_frame’)

content = driver。find_elements_by_css_selector(‘。content’)

stime = driver。find_elements_by_css_selector(‘。c_tx。c_tx3。goDetail’)

for con, sti in zip(content, stime):

data = {

‘time’: sti。text,

‘shuos’: con。text

}

print(data)

pages = driver。page_source

soup = BeautifulSoup(pages, ‘lxml’)

#嘗試一下獲取Cookie,使用get_cookies()

cookie = driver。get_cookies()

cookie_dict = []

for c in cookie:

ck = “{0}={1};”。format(c[‘name’], c[‘value’])

cookie_dict。append(ck)

i = ‘’

for c in cookie_dict:

i += c

print(‘Cookies:’, i)

print(“==========完成================”)

driver。close()

driver。quit()

if __name__ == ‘__main__’:

get_shuoshuo(‘好友QQ號碼’)

程式碼簡析

1。照例,匯入需要使用的模組:

from bs4 import BeautifulSoup

from selenium import webdriver

import time

2。使用Selenium的webdriver例項化一個瀏覽器物件,在這裡使用Phantomjs:

driver = webdriver。PhantomJS(executable_path=“D:\\phantomjs。exe”)

3。設定Phantomjs視窗最大化:

driver。maximize_window()

4。主函式部分

使用get()方法開啟待抓取的URL:

driver。get(‘http://user。qzone。qq。com/{}/311’。format(qq))

1

等待5秒後,判斷頁面是否需要登入,透過查詢頁面是否有相應的DIV的id來判斷:

try:

driver。find_element_by_id(‘login_div’)

a = True

except:

a = False

如果頁面存在登入的DIV,則模擬登入:

driver。switch_to。frame(‘login_frame’) #切換到登入ifram

driver。find_element_by_id(‘switcher_plogin’)。click()

driver。find_element_by_id(‘u’)。clear()#選擇使用者名稱框

driver。find_element_by_id(‘u’)。send_keys(‘QQ號’)

driver。find_element_by_id(‘p’)。clear()#選擇密碼框

driver。find_element_by_id(‘p’)。send_keys(‘QQ密碼’)

driver。find_element_by_id(‘login_button’)。click()#點選登入按鈕

time。sleep(3)

接著,判斷好友空間是否設定了許可權,透過判斷是否存在元素ID:QM_OwnerInfo_Icon

try:

driver。find_element_by_id(‘QM_OwnerInfo_Icon’)

b = True

except:

b = False

如果有許可權能夠訪問到說說頁面,那麼定位元素和資料,並解析:

if b == True:

driver。switch_to。frame(‘app_canvas_frame’)

content = driver。find_elements_by_css_selector(‘。content’)

stime = driver。find_elements_by_css_selector(‘。c_tx。c_tx3。goDetail’)

for con,sti in zip(content,stime):

data = {

# ‘qq’:qq,

‘time’:sti。text,

‘shuos’:con。text

}

print(data)

除了在Selenium中解析資料,我們還可以將當前頁面儲存為原始碼,再使用BeautifulSoup來解析:

pages = driver。page_source

soup = BeautifulSoup(pages,‘lxml’)

最後,我們嘗試一下獲取Cookie,使用get_cookies():

cookie = driver。get_cookies()

cookie_dict = []

for c in cookie:

ck = “{0}={1};”。format(c[‘name’],c[‘value’])

cookie_dict。append(ck)

i = ‘’

for c in cookie_dict:

i += c

print(‘Cookies:’,i)

另外,再介紹兩個Selenium的常用方法:

- 儲存螢幕截圖:

driver。save_screenshot(‘儲存的檔案路徑及檔名’)

執行JS指令碼:

driver。execute_script(“JS程式碼”)