三十三. PhantomJS實例 - QQ空間

1.從QQ郵箱中導出通信錄。(批量獲取,可選)
選擇“通訊錄”→選擇“工具”→選擇以csv格式導出,這樣就可以方便后續獲取好友的QQ號碼。
當然,如果通信錄中顯示的不是QQ郵箱,可以手工去除掉。

2.QQ空間說說的鏈接格式為:http://user.qzone.qq.com/{好友號碼}/311,其中{好友號碼}插入QQ號碼即可。QQ空間說說首次打開需要登錄,這里使用selenium+PhantomJS來實現。

爬取網址:http://user.qzone.qq.com/{好友號碼}/311
爬取內容:好友說說,發表時間
存儲方式:MongoDB或打印

from selenium import webdriver
import time

driver = webdriver.Chrome()
##driver = webdriver.PhantomJS()
driver.maximize_window()
driver.get("https://user.qzone.qq.com/XXX/311")    #輸入QQ號
driver.implicitly_wait(10)
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("賬號")  ##輸入賬號
driver.find_element_by_id("p").clear()
driver.find_element_by_id("p").send_keys("密碼")   ##輸入密碼
driver.find_element_by_id("login_button").click()
time.sleep(3)
driver.implicitly_wait(3)

try:
    driver.find_element_by_id('QM_OwnerInfo_Icon')
    b = True
except:
    b = False

if b == True:
    driver.switch_to_frame("app_canvas_frame")
    contents = driver.find_elements_by_css_selector("pre.content")
    times = driver.find_elements_by_css_selector("a.c_tx.c_tx3.goDetail")
    for content,time in zip(contents,times):
        print(content.text,time.text)

可以考慮加入批量獲取QQ空間好友說說信息,MongoDB存儲等。
代碼如下:

from selenium import webdriver
from itertools import islice
import time
import csv
import pymongo


client = pymongo.MongoClient('localhost',27017)  #連接數據庫
mydb = client['mydb']   #新建mydb數據庫
qq_s = mydb['qq_shuo']     #新建qq_shuo集合

driver = webdriver.Chrome()
#driver = webdriver.PhantomJS() #選擇瀏覽器
driver.maximize_window()
    
def get_info(qq):    
    driver.get("https://user.qzone.qq.com/{}/311".format(qq))
    driver.implicitly_wait(10)

    try:
        driver.find_element_by_id('login_div')   ##首次登陸需要密碼,后面就不需要了,所以此處判斷是否需要登錄。
        a = True
    except:
        a = False

    if a == True:     #登錄模塊   
        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("XXXX")
        driver.find_element_by_id("p").clear()
        driver.find_element_by_id("p").send_keys("XXXX")
        driver.find_element_by_id("login_button").click()
        time.sleep(3)
        driver.implicitly_wait(3)  #登陸qq

    try:
        driver.find_element_by_id('QM_OwnerInfo_Icon')
        b = True
    except:
        b = False

    if b == True:    #爬取內容模塊
        driver.switch_to_frame("app_canvas_frame")
        contents = driver.find_elements_by_css_selector("pre.content")
        times = driver.find_elements_by_css_selector("a.c_tx.c_tx3.goDetail")
        for content,tim in zip(contents,times):
            data = {
                '內容':content.text,
                '時間':tim.text
                }
            qq_s.insert_one(data)  #使用insert_one插入數據
            #print(content.text,tim.text)

if __name__== "__main__":
    qq_lists=[]
    with open("F:/QQmail.csv","r",encoding="utf-8") as f:
        ##方式一:
        reader = csv.reader(f)   #將數據變成列表
        for row in islice(reader, 1, None):    ##跳過第一行的數據
            qq = row[2].split("@")[0]
            qq_lists.append(qq)

##        ##方式二:
##        reader = csv.DictReader(f)   #將數據變成字典
##        for row in reader:
##            qq = row['電子郵件'].split("@")[0]
##            qq_lists.append(qq)

    for qq in qq_lists:
        get_info(qq)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容