文章目录

  • 一、selenium简介
    • (一)实例说明
    • (二)元素定位方式
    • (三)实现滚动条自动下拉
  • 二、Xpath简介
    • (一)语法:
    • (二)实例:
  • 三、定义一个爬虫类
    • (一)导入包
    • (二)初始化类
    • (三)滚动条自动下拉
    • (四)获取Tbody标签的列表
    • (五)解析Tbody标签
    • (六)提取Tbody标签中每个群员的信息
    • (七)将提取到群员的信息写入文件
  • 四、主函数

-----代码传送门-----

一、selenium简介

我们模拟登陆用的是selenium库,selenium是一个自动化测试工具,在爬虫中通常用来进行模拟登陆。

(一)实例说明

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

代码功能:1.打开谷歌浏览器,2.自动输入百度网址并打开百度

如果程序执行错误,浏览器没有打开,那么应该是没有装 Chrome 浏览器或者 Chrome 驱动没有配置在环境变量里。下载驱动,然后将驱动文件路径配置在环境变量即可。

谷歌浏览器驱动下载

(二)元素定位方式

单个元素选取:

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 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
选取当前节点的父节点。
@ 选取属性。
通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

(二)实例:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/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群中的人员信息相关推荐

  1. 爬虫实战-python爬取QQ群好友信息

    自从开始学习爬虫后,总是无法控制那一颗躁动的心.每天总是想要爬点什么,爬过电影.爬过电影影评.爬过图片(美女图).爬过视频链接,从最初的简单解析网页到模拟登陆再到异步加载,现在看到一个网页最先想的就是 ...

  2. 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)

    请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌曲发行时间.评论条数.评论时间.评论点赞次数.评论内容具体(每一首歌的评论& ...

  3. 知乎python练手的_Python—爬虫之初级实战项目:爬取知乎任一作者的文章练手

    爬虫之初级实战项目:爬取知乎任一作者的文章练手 在正式上代码之前,先过一遍之前所学知识的框架内容,温故而知新!!! 接下来我们直接上代码,一定要手敲代码.手敲代码.手敲代码!!! import req ...

  4. Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...

  5. python——利用正则表达式爬取豆瓣读书中的图书信息

    本来可以使用一条正则表达式完成图书信息的爬取,结果发现在CPU性能较差的电脑上进行爬取时耗时非常长,几乎无法将结果获取到.所以,将大的html源码先经过一次简单的匹配以获取到一个中间结果,然后再从中间 ...

  6. Python项目实战:爬取QQ音乐中的付费歌曲

    2019独角兽企业重金招聘Python工程师标准>>> 前言 相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取QQ付费音乐的案列,欢迎大家一起学习,一 ...

  7. 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息

    本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习. 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过. 1.Selenium简单介绍 ...

  8. python爬取qq群成员_教你用python爬取自己加入的QQ群成员名单

    本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...

  9. python爬取小说基本信息_python实战项目:爬取某小说网

    项目文档: 项目简介: 爬取某小说网首页中的全部小说,并储存到数据库中 项目版本 :python2.7.12 项目源码: 源码已上传 github: 源码github 项目总览: 1. 爬取小说首页中 ...

最新文章

  1. 2021年大数据常用语言Scala(八):基础语法学习 循环
  2. 云原生时代,Kubernetes让应用落地的N种招式(附PPT)
  3. SpringBoot项目部分文件解析、数据库连接(idea)
  4. springboot2.2.9源码搭建
  5. Linux软件包管理的知识点,Debian软件包管理APT和存储库的基础知识[Linux 101] | MOS86...
  6. c++第五版练习10.14 10.15
  7. 【已成功安装但无法使用】Python 3.10.2 安装pyodbc
  8. python百度热搜指数+动态可视化排行榜
  9. gocv拆分颜色通道
  10. C++著名库的比较和学习经验
  11. Excel合并单元格怎么分组排序?
  12. excel中的文本转换成数值
  13. ​什么是gop_cache
  14. iOS-配置AppIcon
  15. 5秒钟用google earth engine(GEE)填补Landsat7条带问题
  16. (原)详解生产线物流规划的原理及操作方式
  17. 白鲸开源代立冬:一年5个孵化项目来自于中国,佛系Apache如何帮助中国开源立足全球?
  18. MathNet.Numerics主要类功能简述
  19. 贝努利模型 matlab代码,贝努利(Bernulli)-模型.ppt
  20. MAC安装homebrew慢解决方案

热门文章

  1. 全局内存BSS,DATA,RODATA的区别以及其他内存区间相关
  2. 非阻塞connect的实现
  3. sparksql删除MySQL数据_Databricks 第6篇:Spark SQL 维护数据库和表
  4. MySQL数据库az排序_RDS Mysql Single-AZ和Multi-AZ性能差异
  5. fedora21 mysql_在fedora21 上的php+mysql+apache环境搭建
  6. php artisan 更新,Laravel 5:PHP Artisan迁移:刷新
  7. 简约代码表白_JS实现520 表白简单代码
  8. web python 维护性_Lemon-Web阶段考核(三)
  9. win10 配置 maven_home 一会儿成功一会儿失败_在macbook上运行移动硬盘里的win10和macos...
  10. linux导出文件夹到u盘,Linux系统放到U盘上直接在U盘上运行Linux