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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战项目三:爬取QQ群中的人员信息

發(fā)布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战项目三:爬取QQ群中的人员信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、selenium簡介
    • (一)實例說明
    • (二)元素定位方式
    • (三)實現滾動條自動下拉
  • 二、Xpath簡介
    • (一)語法:
    • (二)實例:
  • 三、定義一個爬蟲類
    • (一)導入包
    • (二)初始化類
    • (三)滾動條自動下拉
    • (四)獲取Tbody標簽的列表
    • (五)解析Tbody標簽
    • (六)提取Tbody標簽中每個群員的信息
    • (七)將提取到群員的信息寫入文件
  • 四、主函數

-----代碼傳送門-----

一、selenium簡介

我們模擬登陸用的是selenium庫,selenium是一個自動化測試工具,在爬蟲中通常用來進行模擬登陸。

(一)實例說明

from selenium import webdriverdriver = webdriver.Chrome() driver.get('http://www.baidu.com/')

代碼功能:1.打開谷歌瀏覽器,2.自動輸入百度網址并打開百度

如果程序執(zhí)行錯誤,瀏覽器沒有打開,那么應該是沒有裝 Chrome 瀏覽器或者 Chrome 驅動沒有配置在環(huán)境變量里。下載驅動,然后將驅動文件路徑配置在環(huán)境變量即可。

谷歌瀏覽器驅動下載

(二)元素定位方式

單個元素選取:

find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector

多個元素選取:

find_elements_by_name find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector

代碼示例:

#獲取網頁中的h1標簽 h1 = driver.find_element_by_name("h1") #獲取網頁中所有的h1標簽 h1_list = driver.find_elements_by_name("h1")

(三)實現滾動條自動下拉

代碼展示:

#將滾動條移動到頁面的底部 js="var q=document.documentElement.scrollTop=100000" driver.execute_script(js)

二、Xpath簡介

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。結構關系包括 父、子、兄弟、先輩、后代等。

(一)語法:

表達式功能描述
nodename選取此節(jié)點的所有子節(jié)點。
/從根節(jié)點選取。
//從匹配選擇的當前節(jié)點選擇文檔中的節(jié)點,而不考慮它們的位置。
.選取當前節(jié)點。
選取當前節(jié)點的父節(jié)點。
@選取屬性。
通配符描述
*匹配任何元素節(jié)點。
@*匹配任何屬性節(jié)點。
node()匹配任何類型的節(jié)點。

(二)實例:

路徑表達式結果
bookstore選取 bookstore 元素的所有子節(jié)點。
/bookstore選取根元素 bookstore。注釋:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!
bookstore/book選取屬于 bookstore 的子元素的所有 book 元素。
//book選取所有 book 子元素,而不管它們在文檔中的位置。
bookstore//book選擇屬于 bookstore 元素的后代的所有 book 元素,而不管它們位于 bookstore 之下的什么位置。
//@lang選取名為 lang 的所有屬性。
路徑表達式結果
/bookstore/*選取 bookstore 元素的所有子元素。
//*選取文檔中的所有元素。
//title[@*]選取所有帶有屬性的 title 元素。

更多語法知識參考:Xpath實現信息提取

代碼實例:

#獲取 class 為 bold 的標簽名 result = html.xpath('//*[@class="bold"]')

三、定義一個爬蟲類

(一)導入包

import time from selenium import webdriver

(二)初始化類

class qqGroupSpider():'''Q群爬蟲類'''def __init__(self, driver,qq,passwd,qqgroup):'''初始化根據用戶信息登錄到Q群管理界面:param driver::param qq::param passwd::param qqgroup::param writefile:'''url = "https://qun.qq.com/member.html#gid={}".format(qqgroup)self.driver=driverdriver.delete_all_cookies()driver.get(url)time.sleep(1)driver.switch_to.frame("login_frame") # 進入登錄iframetime.sleep(1)change = driver.find_element_by_id("switcher_plogin")change.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(passwd)driver.find_element_by_class_name("login_button").click()time.sleep(1)

(三)滾動條自動下拉

def scroll_foot(self,driver):'''控制屏幕向下滾動到底部:param driver::return:'''js = "var q=document.documentElement.scrollTop=100000"return driver.execute_script(js)

(四)獲取Tbody標簽的列表

def getTbodyList(self, driver):print("getTbodyList()函數運行過")return driver.find_elements_by_xpath('//div[@class="group-memeber"]//tbody[contains(@class,"list")]')

(五)解析Tbody標簽

def parseTbody(self, html):'''解析tbody里面的內容,一個tbody里面有多個成員,解析完成后,返回成員基本情況的列表:param html::return:'''# selector = etree.HTML(html)print("parseTbody()函數運行過")memberLists = []for each in html:memberList = each.find_elements_by_xpath('tr[contains(@class,"mb mb")]')memberLists += memberListprint("memberLists長度為:{}".format(len(memberLists)))memberLists_data = []for each in memberLists: memberLists_data.append(self.parseMember(each))return memberLists_data

(六)提取Tbody標簽中每個群員的信息

def parseMember(self, mb):'''解析每個人各項描述,以逗號隔開,返回一個成員的基本情況:param mb::return:'''print("parseMember()函數運行過")td = mb.find_elements_by_xpath('td')print("td長度為:{}".format(len(td)))qId = td[1].text.strip()nickName = td[2].find_element_by_xpath('span').text.strip()card = td[3].find_element_by_xpath('span').text.strip()qq = td[4].text.strip()sex = td[5].text.strip()qqAge = td[6].text.strip()joinTime = td[7].text.strip()lastTime = td[8].text.strip()a = (qId + "|" + qq + "|" + nickName + "|" + card + "|" + sex + "|" + qqAge + "|" + joinTime + "|" + lastTime)print(a)return a

(七)將提取到群員的信息寫入文件

def parseAndWrite(self, tbody):'''解析HTML中的tbody,解析完成后寫入到本地文件:param tbody::return:'''print("parseAndWrite()函數運行過")memberList = self.parseTbody(tbody)with open("1607.csv", 'a+', encoding="utf-8") as f:for each in memberList:f.write(str(each)+"\n")

四、主函數

def main():qq = "你的QQ賬號"passwd = "你的QQ密碼"qqgroup = "想要爬取的QQ群群號"driver = webdriver.Chrome()spider=qqGroupSpider(driver,qq,passwd,qqgroup)time.sleep(10)# 找到QQ群的人數qqNum = int(driver.find_element_by_xpath('//*[@id="groupMemberNum"]').text.strip())print("QQ群人數為:"+str(qqNum))curren_qq_num=0prelen=0while curren_qq_num != qqNum:curren_qq_num=len(driver.find_elements_by_xpath('//*[@id="groupMember"]//td[contains(@class,"td-no")]'))#不停的向下滾動屏幕,直到底部spider.scroll_foot(driver)#每次滾動休息1秒time.sleep(1)tlist = spider.getTbodyList(driver)spider.parseAndWrite(tlist[prelen:])prelen = len(tlist)#更新tbody列表的長度driver.quit()if __name__ == '__main__':main()

總結

以上是生活随笔為你收集整理的实战项目三:爬取QQ群中的人员信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。