实战项目三:爬取QQ群中的人员信息
文章目录
- 一、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群中的人员信息相关推荐
- 爬虫实战-python爬取QQ群好友信息
自从开始学习爬虫后,总是无法控制那一颗躁动的心.每天总是想要爬点什么,爬过电影.爬过电影影评.爬过图片(美女图).爬过视频链接,从最初的简单解析网页到模拟登陆再到异步加载,现在看到一个网页最先想的就是 ...
- 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)
请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌曲发行时间.评论条数.评论时间.评论点赞次数.评论内容具体(每一首歌的评论& ...
- 知乎python练手的_Python—爬虫之初级实战项目:爬取知乎任一作者的文章练手
爬虫之初级实战项目:爬取知乎任一作者的文章练手 在正式上代码之前,先过一遍之前所学知识的框架内容,温故而知新!!! 接下来我们直接上代码,一定要手敲代码.手敲代码.手敲代码!!! import req ...
- Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...
- python——利用正则表达式爬取豆瓣读书中的图书信息
本来可以使用一条正则表达式完成图书信息的爬取,结果发现在CPU性能较差的电脑上进行爬取时耗时非常长,几乎无法将结果获取到.所以,将大的html源码先经过一次简单的匹配以获取到一个中间结果,然后再从中间 ...
- Python项目实战:爬取QQ音乐中的付费歌曲
2019独角兽企业重金招聘Python工程师标准>>> 前言 相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取QQ付费音乐的案列,欢迎大家一起学习,一 ...
- 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息
本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习. 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过. 1.Selenium简单介绍 ...
- python爬取qq群成员_教你用python爬取自己加入的QQ群成员名单
本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...
- python爬取小说基本信息_python实战项目:爬取某小说网
项目文档: 项目简介: 爬取某小说网首页中的全部小说,并储存到数据库中 项目版本 :python2.7.12 项目源码: 源码已上传 github: 源码github 项目总览: 1. 爬取小说首页中 ...
最新文章
- 2021年大数据常用语言Scala(八):基础语法学习 循环
- 云原生时代,Kubernetes让应用落地的N种招式(附PPT)
- SpringBoot项目部分文件解析、数据库连接(idea)
- springboot2.2.9源码搭建
- Linux软件包管理的知识点,Debian软件包管理APT和存储库的基础知识[Linux 101] | MOS86...
- c++第五版练习10.14 10.15
- 【已成功安装但无法使用】Python 3.10.2 安装pyodbc
- python百度热搜指数+动态可视化排行榜
- gocv拆分颜色通道
- C++著名库的比较和学习经验
- Excel合并单元格怎么分组排序?
- excel中的文本转换成数值
- ​什么是gop_cache
- iOS-配置AppIcon
- 5秒钟用google earth engine(GEE)填补Landsat7条带问题
- (原)详解生产线物流规划的原理及操作方式
- 白鲸开源代立冬:一年5个孵化项目来自于中国,佛系Apache如何帮助中国开源立足全球?
- MathNet.Numerics主要类功能简述
- 贝努利模型 matlab代码,贝努利(Bernulli)-模型.ppt
- MAC安装homebrew慢解决方案
热门文章
- 全局内存BSS,DATA,RODATA的区别以及其他内存区间相关
- 非阻塞connect的实现
- sparksql删除MySQL数据_Databricks 第6篇:Spark SQL 维护数据库和表
- MySQL数据库az排序_RDS Mysql Single-AZ和Multi-AZ性能差异
- fedora21 mysql_在fedora21 上的php+mysql+apache环境搭建
- php artisan 更新,Laravel 5:PHP Artisan迁移:刷新
- 简约代码表白_JS实现520 表白简单代码
- web python 维护性_Lemon-Web阶段考核(三)
- win10 配置 maven_home 一会儿成功一会儿失败_在macbook上运行移动硬盘里的win10和macos...
- linux导出文件夹到u盘,Linux系统放到U盘上直接在U盘上运行Linux