日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬取qq空间说说

發(fā)布時間:2024/3/12 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取qq空间说说 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模塊:selenium,pyquery,json,time
使用的是:Chrome
遇到的問題:

  • 模擬點擊下一頁操作,需要換方式。
  • 遇到元素在frame,需要進入查找。
  • 對空間的登陸進行分析

    進入網(wǎng)址:https://i.qq.com/
    說說地址:https://user.qzone.qq.com/{qq}/311

    我模擬點擊這個頭像,也可以點擊賬號密碼登陸,然后填充。
    對頭像點擊右鍵檢查審查元素

    我們可以模擬點擊這個標簽的id進行模擬操作

    url = f'https://user.qzone.qq.com/{qq}/311'browser.get(url)try:browser.find_element(By.NAME, 'login_frame') # 發(fā)現(xiàn)登陸的frameexcept:raiseelse:try:browser.switch_to_frame('login_frame') # 發(fā)現(xiàn)之后進入login_framelogin = wait.until(EC.element_to_be_clickable((By.ID, 'img_out_1290259791'))) # 獲取點擊按鈕 也可以進行輸入賬號密碼login.click() # 進行點擊except Exception as e:raisetime.sleep(2)

    在模擬登陸的時候:

  • 直接尋找這個By.ID,img_out_1290259791是查找不到的,因為他在frame里面,所以browser.find_element(By.NAME, ‘login_frame’)進行判斷發(fā)現(xiàn)。
  • 然后再進入 browser.switch_to_frame(‘login_frame’)
  • 然后才是模擬點擊登陸
  • 對說說進行分析

    思路是:首先尋找說說有幾頁,然后在進行每頁的跳轉(zhuǎn)


    這里就是說說的內(nèi)容,發(fā)現(xiàn)這里也是一個frame,所以要進入,然后判斷說說有幾頁。

    browser.switch_to_frame('app_canvas_frame') # 進入switch_to_framepage_last = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#pager_last_0 > span'))).text # 最后一頁return int(page_last)

    對說說內(nèi)容進行分析

    def get_page_text(n):try:doc = pq(browser.page_source) # 獲取頁面的htmlitems = doc('#msgList > li.feed').items() # 獲取所有的說說for item in items: # 對說說進行分開yield {'time': item.find('div.box.bgr3 > div.ft > div.info > .c_tx3 > .c_tx').text(),'text': item.find('.content').text().lstrip('?\n')}text = wait.until(EC.presence_of_element_located((By.ID, f'pager_go_{n-1}'))) # 獲取跳轉(zhuǎn)頁的輸入框text.send_keys(n+1) # 輸入下一頁text.send_keys(Keys.ENTER) #進行確定except:browser.close()

    一開始模擬的點擊下一頁來進行爬去,但是遇到的問題是,

  • 有的時候模擬點擊的時候頁面沒有加載完畢,所以模擬點擊的位置不在下一頁
  • 點擊下一頁了,沒有跳轉(zhuǎn)
  • 所以換取了思路,進行跳轉(zhuǎn)頁的點擊,知道了這一點以后,遇到爬頁面的點擊就不要模擬點擊下一頁了。
    爬取的格式:

    {"time": "12:42", "text": "一個男生如果真的愛你 無論多忙 都會騰出時間來陪你 他舍不得你胡思亂想 {uin:5289224,nick:查看全文,who:1}"} {"time": "6:00", "text": " 我發(fā)現(xiàn)女孩子很容易被感動 喜歡的人說一句稍微寵溺一點的話 就開心的想把臉埋進被子里悶悶的笑出聲 笑完又覺得丟臉 明明一大把年紀 還像個沒愛過人的少女"} {"time": "昨天23:07", "text": " 如果想我了 就抱抱空氣吧 畢竟本可愛無處不在"} {"time": "昨天23:07", "text": ""} {"time": "昨天20:09", "text": "\"\"\" 他本是小小子國的質(zhì)子,身份卑微,但是沒關系。她喜 今夜,是她的新婚夜。 她披著鳳冠霞帔,緊張又害怕。 最后她聽到宮女們的聲音,喚了一聲駙馬爺。 她知道,他來了,她的如意郎君魏君羨。歡他,喜歡這匹野馬,一步步提攜,最終勝任皇宮禁衛(wèi)軍統(tǒng)領,這才有資格成為她的駙馬。 她從蓋頭的邊緣看到了他的靴子,駐足在面前,卻遲遲沒有揭開蓋頭。 她正納悶,沒想到他吹熄了蠟燭,直接將她Tui到在chuang上,隨后是si&che她的喜服。 嘶啦一聲,她驟然一涼。 “君羨……”"} {"time": "昨天13:47", "text": " 祝你喜歡的人恰巧也喜歡你 祝你每次考試都能有進步 祝你在下雨天時路上的空車都不拒載 祝你做過的美夢都不會忘記 祝你的心情永遠像周五的下午 祝你永遠活的像個孩子"}

    完整的代碼

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from pyquery import PyQuery as pq import time import jsonoptions = webdriver.ChromeOptions() # 設置無圖模式 prefs = {'profile.default_content_setting_values': {'images': 2} } options.add_argument('--headless') # 瀏覽器隱藏 options.add_argument('--disable-gpu') options.add_experimental_option('prefs', prefs) #設置無圖模式 browser = webdriver.Chrome(chrome_options=options) wait = WebDriverWait(browser, 5)def get_last_page(qq):try:url = f'https://user.qzone.qq.com/{qq}/311'browser.get(url)try:browser.find_element(By.NAME, 'login_frame') # 發(fā)現(xiàn)登陸的frameexcept:raiseelse:try:browser.switch_to_frame('login_frame') # 發(fā)現(xiàn)之后進入login_framelogin = wait.until(EC.element_to_be_clickable((By.ID, 'img_out_1290259791'))) # 獲取點擊按鈕 也可以進行輸入賬號密碼login.click() # 進行點擊except Exception as e:raisetime.sleep(2)browser.switch_to_frame('app_canvas_frame') # 進入switch_to_framepage_last = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#pager_last_0 > span'))).text # 最后一頁return int(page_last)except Exception:get_last_page(qq)def get_page_text(n):try:doc = pq(browser.page_source) # 獲取頁面的htmlitems = doc('#msgList > li.feed').items() # 獲取所有的說說for item in items: # 對說說進行分開yield {'time': item.find('div.box.bgr3 > div.ft > div.info > .c_tx3 > .c_tx').text(),'text': item.find('.content').text().lstrip('?\n')}text = wait.until(EC.presence_of_element_located((By.ID, f'pager_go_{n-1}'))) # 獲取跳轉(zhuǎn)頁的輸入框text.send_keys(n+1) # 輸入下一頁text.send_keys(Keys.ENTER) #進行確定except:browser.close()def write_page(page):with open('qq.txt', 'a', encoding='utf-8') as f:for page in get_page_text(page):f.write(json.dumps(page, ensure_ascii=False) + '\n') # 將dict轉(zhuǎn)換為json格式進行保存if __name__ == '__main__':page_last = get_last_page('qq')for i in range(1, page_last+1):write_page(i)browser.close()

    總結

    以上是生活随笔為你收集整理的python爬取qq空间说说的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。