browser.find_element_by_xpath(‘.//ul[@id=“headerNav”]/li[4]’).click()
8.點擊群管理之后,進(jìn)入群管理界面,我們需要的是成員管理
點擊之后,我們找到成員管理標(biāo)簽并點擊
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘color-tit’)
)
)
browser.find_element_by_class_name(‘color-tit’).click()
9.點擊成員管理之后會重新新建一個窗口,這個時候就會出現(xiàn)句柄,我們需要將當(dāng)然窗口的句柄切換到新打開的這個界面,不然的話,是獲取不到新打開界面的信息的,注釋已經(jīng)寫了
打印全部窗口句柄
print(browser.window_handles)
打印當(dāng)前窗口句柄
print(browser.current_window_handle)
注意這里點擊成員管理之后會自動跳轉(zhuǎn)到一個新窗口打開這個頁面
所以我們需要將窗口句柄切換到這個新窗口
browser.switch_to.window(browser.window_handles[1])
解釋一下browser.switch_to.window是獲取當(dāng)前一共有幾個窗口
這里是2個
browser.switch_to.window這個是指定當(dāng)前游標(biāo)切換到哪個窗口
其實也可以這么寫
all_window = browser.switch_to.window返回的是一個列表
browser.switch_to.window(all_window[1])
效果是一樣的
10.我們需要的是我加入的群信息
切換句柄之后,我們顯示等待窗口出來
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘my-all-group’)
)
)
篩選出我加入的群標(biāo)簽
lis = browser.find_elements_by_xpath(‘.//div[@class=“my-all-group”]/ul[2]/li’)
11.遍歷列表,取出信息
遍歷
num= 0
while True:
if num == len(lis):
break
try:
按順序選擇群并獲取信息
先點擊該群獲取成員信息
lis[num].click()
顯示等待信息加載完成
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘list’)
)
)
獲取該群當(dāng)前有多少人,后面翻頁需要
groupMemberNum = eval(browser.find_element_by_id(‘groupMemberNum’).text)
每一次翻頁都會刷新21條信息,所以寫個循環(huán)
這里加1是因為假如一個群有36人,那么count=1,如果循環(huán)的話就不會翻頁了
也就是只能抓到一頁的數(shù)據(jù),大家可以自己想想其中的流程就知道了
count = groupMemberNum // 21 + 1
這里我只爬取每個群的一部分,如果想爬取全部成員信息
請注釋下面的if語句
if count > 2:
count = 1
每次循環(huán)都進(jìn)行翻頁
while count:
count -= 1
browser.execute_script(‘document.documentElement.scrollTop=100000’)
time.sleep(2)
time.sleep(2)
開始獲取成員信息
trs = browser.find_elements_by_class_name(‘mb’)
if trs:
遍歷
for tr in trs:
tds = tr.find_elements_by_tag_name(‘td’)[2:]
if len(tds) == 8:
qq網(wǎng)名
qq_name = tds[0].text
群名稱
group_name = tds[1].text
qq號
qq_number = tds[2].text
性別
gender = tds[3].text
qq年齡
qq_year = tds[4].text
入群時間
join_time = tds[5].text
等級(積分)
level = None
最后發(fā)言時間
end_time = tds[6].text
聲明一個字典存儲數(shù)據(jù)
data_dict = {}
data_dict[‘qq_name’] = qq_name
data_dict[‘group_name’] = group_name
data_dict[‘qq_number’] = qq_number
data_dict[‘gender’] = gender
data_dict[‘qq_year’] = qq_year
data_dict[‘join_time’] = join_time
data_dict[‘level’] = level
data_dict[‘end_time’] = end_time
print(data_dict)
elif len(tds) == 9:
qq網(wǎng)名
qq_name = tds[0].text
群名稱
group_name = tds[1].text
qq號
qq_number = tds[2].text
性別
gender = tds[3].text
qq年齡
qq_year = tds[4].text
入群時間
join_time = tds[5].text
等級(積分)
level = tds[6].text
最后發(fā)言時間
end_time = tds[7].text
聲明一個字典存儲數(shù)據(jù)
data_dict = {}
data_dict[‘qq_name’] = qq_name
data_dict[‘group_name’] = group_name
data_dict[‘qq_number’] = qq_number
data_dict[‘gender’] = gender
data_dict[‘qq_year’] = qq_year
data_dict[‘join_time’] = join_time
data_dict[‘level’] = level
data_dict[‘end_time’] = end_time
data_list.append(data_dict)
print(data_dict)
browser.find_element_by_id(‘changeGroup’).click()
time.sleep(3)
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘ui-dialog’)
)
)
lis = browser.find_elements_by_xpath(‘.//div[@class=“my-all-group”]/ul[2]/li’)
num += 1
except Exception as e:
lis = browser.find_elements_by_xpath(‘.//div[@class=“my-all-group”]/ul[2]/li’)
num += 1
continue
完整代碼附上
導(dǎo)入需要的包
爬取qq群的成員信息
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
import json
import csv
開始登陸
def login_spider():
url = ‘https://qun.qq.com/’
構(gòu)建谷歌驅(qū)動器
browser = webdriver.Chrome()
請求url
browser.get(url)
模擬登陸,首先找到登陸的id,并點擊
browser.find_element_by_css_selector(‘#headerInfo p a’).click()
點擊之后會彈出一個登陸框,這時候我們用顯示等待來等待這個登陸框加載出來
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, ‘#loginWin iframe’)
)
)
print(‘登陸框已加載’)
登陸框加載之后,我們發(fā)現(xiàn)整個登陸框其實就是另一個網(wǎng)網(wǎng)頁
如果在原網(wǎng)頁操作這個登陸框的話,是不能操作的
所以我們只需要提取iframe標(biāo)簽的src屬性,然后再去訪問這個url即可實現(xiàn)
自動登陸
找到iframe標(biāo)簽并獲取是如此熟悉
iframe_url = browser.find_element_by_css_selector(‘#loginWin iframe’).get_attribute(‘src’)
再訪問這個url
browser.get(iframe_url)
找到快捷登陸的頭像并點擊
首先用顯示等待這個頭像已經(jīng)加載完成
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.ID, ‘qlogin_list’)
)
)
browser.find_element_by_css_selector(‘#qlogin_list a’).click()
print(‘登陸成功’)
return browser
切換句柄操作
def switch_spider(browser):
登陸成功之后,我們就找到群管理的標(biāo)簽并點擊,首先等待這個元素加載完成
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.XPATH, ‘.//ul[@id=“headerNav”]/li[4]’)
)
)
browser.find_element_by_xpath(‘.//ul[@id=“headerNav”]/li[4]’).click()
點擊之后,我們找到成員管理標(biāo)簽并點擊
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘color-tit’)
)
)
browser.find_element_by_class_name(‘color-tit’).click()
打印全部窗口句柄
print(browser.window_handles)
打印當(dāng)前窗口句柄
print(browser.current_window_handle)
注意這里點擊成員管理之后會自動跳轉(zhuǎn)到一個新窗口打開這個頁面
所以我們需要將窗口句柄切換到這個新窗口
browser.switch_to.window(browser.window_handles[1])
解釋一下browser.switch_to.window是獲取當(dāng)前一共有幾個窗口
這里是2個
browser.switch_to.window這個是指定當(dāng)前游標(biāo)切換到哪個窗口
其實也可以這么寫
all_window = browser.switch_to.window返回的是一個列表
browser.switch_to.window(all_window[1])
效果是一樣的
return browser
開始采集數(shù)據(jù)
def start_spider(browser):
聲明一個列表存儲字典
data_list = []
切換句柄之后,我們顯示等待窗口出來
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘my-all-group’)
)
)
篩選出我加入的群標(biāo)簽
lis = browser.find_elements_by_xpath(‘.//div[@class=“my-all-group”]/ul[2]/li’)
遍歷
num = 0
while True:
try:
按順序選擇群并獲取信息
先點擊該群獲取成員信息
lis[num].click()
顯示等待信息加載完成
WebDriverWait(browser, 1000).until(
EC.presence_of_all_elements_located(
(By.CLASS_NAME, ‘list’)
)
)
獲取該群當(dāng)前有多少人,后面翻頁需要
groupMemberNum = eval(browser.find_element_by_id(‘groupMemberNum’).text)
每一次翻頁都會刷新21條信息,所以寫個循環(huán)
這里加1是因為假如一個群有36人,那么count=1,如果循環(huán)的話就不會翻頁了
也就是只能抓到一頁的數(shù)據(jù),大家可以自己想想其中的流程就知道了
count = groupMemberNum // 21 + 1
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年P(guān)ython開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Python開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024c (備注Python)
(1)Python所有方向的學(xué)習(xí)路線(新版)
這是我花了幾天的時間去把Python所有方向的技術(shù)點做的整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
最近我才對這些路線做了一下新的更新,知識體系更全面了。
(2)Python學(xué)習(xí)視頻
包含了Python入門、爬蟲、數(shù)據(jù)分析和web開發(fā)的學(xué)習(xí)視頻,總共100多個,雖然沒有那么全面,但是對于入門來說是沒問題的,學(xué)完這些之后,你可以按照我上面的學(xué)習(xí)路線去網(wǎng)上找其他的知識資源進(jìn)行進(jìn)階。
(3)100多個練手項目
我們在看視頻學(xué)習(xí)的時候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運用它們,這時候練手項目就很適合了,只是里面的項目比較多,水平也是參差不齊,大家可以挑自己能做的項目去練練。文章來源:http://www.zghlxwxcb.cn/news/detail-860660.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-860660.html
向的技術(shù)點做的整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
最近我才對這些路線做了一下新的更新,知識體系更全面了。
(2)Python學(xué)習(xí)視頻
包含了Python入門、爬蟲、數(shù)據(jù)分析和web開發(fā)的學(xué)習(xí)視頻,總共100多個,雖然沒有那么全面,但是對于入門來說是沒問題的,學(xué)完這些之后,你可以按照我上面的學(xué)習(xí)路線去網(wǎng)上找其他的知識資源進(jìn)行進(jìn)階。
(3)100多個練手項目
我們在看視頻學(xué)習(xí)的時候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運用它們,這時候練手項目就很適合了,只是里面的項目比較多,水平也是參差不齊,大家可以挑自己能做的項目去練練。
到了這里,關(guān)于Python爬蟲使用selenium爬取qq群的成員信息(全自動實現(xiàn)自動登陸)(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!