import requests
import pymongo
import requests
import os class QqGroup:
#三个接口url 获取 qq组号 获取每组成员信息 获取qq头像下载地址
group_url = "https://qun.qq.com/cgi-bin/qun_mgr/get_group_list"
member_url = "https://qun.qq.com/cgi-bin/qun_mgr/search_group_members"
pic_url = "http://q4.qlogo.cn/g?b=qq&nk={%s}&s=140"
#一般将cookie与链接数据库代码写在构造函数
def __init__(self,cookie):
self.cookie = cookie
self.client = pymongo.MongoClient(host='118.24.3.40',port=27017)
self.db = self.client['qq_group'] #数据库名称
self.table = self.db['qq_group'] #表名称
#获取 qq组号
def get_all_group(self):
data = {'bkn':2039193070}
res = requests.post(self.group_url,data,headers={'cookie':self.cookie}).json()
#新方法 1、对于返回值为多个list合并,如果返回为空,增加默认值为空 2、对于字典取值用get方法
all_groups = res.get('join', []) + res.get('create', []) + res.get('manage', []) all_gc=[i.get('gc') for i in all_groups] return all_gc
#获取每组成员信息
def get_group_info(self,num):
data = {"gc":num,"st":0,"end":200,"sort":0,"bkn":2039193070}
res = requests.post(url=self.member_url, data=data, headers={'Cookie':self.cookie})
mems = res.json().get("mems")
for i in mems:
mem = {
"qq": i.get("uin"),
"gender": i.get("g"),
"nick": i.get("nick"),
"card": i.get("card"),
"qage": i.get("qage")
}
if mem.get("gender") == 0:
mem['gender'] = "男"
elif mem.get("gender") == 1:
mem['gender'] = "女"
else:
mem['gender'] = "未知"
if mem.get("card") == "":
mem['card'] = "没有群名片"
self.save_mongo(mem)
self.down_pic(i.get("uin"))
#存入mogodb数据库
def save_mongo(self,data):
self.table.insert(data) #下载qq头像
def down_pic(self,qq_num):
real_url=self.pic_url %qq_num
res=requests.get(real_url).content
pathnew = os.path.dirname(os.path.abspath(__file__))
pathnew = os.path.join(pathnew, 'imgs')
if not os.path.isdir('imgs'):
os.makedirs('imgs')
with open(os.path.join(pathnew, str(qq_num) + '.jpg'), 'wb') as fw:
fw.write(res)
print('%s头像下载完成' % qq_num)
#main函数用于将各过程统一到一个函数,便于实例化后调用
def mian(self):
all_group=self.get_all_group()
for i in all_group:
self.get_group_info(i)
#实例化类 参数传递为cookie
Q=QqGroup('pgv_pvid=1745803612; pgv_pvi=9485686784; RK=vRZxXdy1Y7; _qpsvr_localtk=0.8876927078641847; pgv_si=s3971407872; ptisp=cnc; ptcz=e42f943c39b23e3d7a94d9deac0de69388506bbb9b09000f197b8681624f70ac; uin=o0106148088; skey=@pH5b3tYaY; pt2gguin=o0106148088; p_uin=o0106148088; pt4_token=Vrwh5LwXxUAe0OaJi5DR-XEt8F13T5OheqfWVI3CJjQ_; p_skey=SPaNeBpdwjMfAGplMvT-msRMptEYPnPykjrJo80kXqY_')
Q.mian()

python-爬虫:取qq号中各分组成员信息存入数据库,并将qq头像下载保存到文件夹,图片命名为qq号(实例3)的更多相关文章

  1. Python爬取贴吧中的图片

    #看到贴吧大佬在发图,准备盗一下 #只是爬取一个帖子中的图片 1.先新建一个scrapy项目 scrapy startproject TuBaEx 2.新建一个爬虫 scrapy genspider ...

  2. Python抓取单个网页中所有的PDF文档

    Github博文地址,此处更新可能不是很及时. 1.背景 最近发现算法以及数据结构落下了不少(其实还是大学没怎么好好学,囧rz),考虑到最近的项目结构越来越复杂了,用它来练练思路,就打算复习下数据结构 ...

  3. 小白学 Python 爬虫(5):前置准备(四)数据库基础

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  4. python爬虫1——获取网站源代码(豆瓣图书top250信息)

    # -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...

  5. python爬取返利网中值得买中的数据

    先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy 查找目标数据使用的是beautifulsoup模块. 1.观察网页,寻找规律 打开值得买这块内容 1>分析 ...

  6. python爬取365好书中小说

    需要转载的小伙伴转载后请注明转载的地址 需要用到的库 from bs4 import BeautifulSoup import requests import time 365好书链接:http:// ...

  7. Python爬虫框架Scrapy获得定向打击批量招聘信息

    爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是.抓取特定站点网页的HTML数据.只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址, ...

  8. Java-如何挖取某个网站中的ajax请求信息

    通常情况,通过网络爬虫挖取到的基本为网页静态内容,而动态ajax取数的内容是我个人暂时不知如何一次性把网站中的ajax获取 这里介绍的是某个网站中的某一个ajax多某个table刷新,期数据,并提供其 ...

  9. 【Python爬虫】如何确定自己浏览器的User-Agent信息

    User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本.浏览器及版本等信息.在做爬虫时加上此信息,可以伪装为浏览器:如果不加,很可能会被识别出为爬虫. 那么如 ...

随机推荐

  1. GCD 之线程死锁

    GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能. 如此强大的工具用不好可能会出现线程死锁. 如下代码: - (void)viewDidLoad { [super vie ...

  2. 云服务器 - 安装zookeeper单机环境

    由于电脑中病毒,被人当做肉鸡挖矿了...所以很多东西都要重装, 之前没有写过zk如何安装,所以安装的时候顺便来记录一下分享出来 第一步上传zk安装包到服务器,如图: 解压: tar -zxvf zoo ...

  3. ffmpeg主体架构分析

    [时间:2016-07] [状态:Open] [关键词:ffmpeg,libavcodec,libavformat] FFmpeg接触几年了,用的比较多的是libavcodec和libavformat ...

  4. 微信mac版的bug 直接显示了消息原始数据

    <msg> <voicemsg endflag="1" cancelflag="0" forwardflag="0" vo ...

  5. hdoj:2033

    #include <iostream> #include <string> using namespace std; int main() { int n; int h, m, ...

  6. 【HTTPS】自签CA证书 && nginx配置https服务

    首先,搭建https服务肯定需要一个https证书.这个证书可以看做是一个应用层面的证书.之所以这么说是因为https证书是基于CA证书生成的.对于正式的网站,CA证书需要到有资质的第三方证书颁发机构 ...

  7. Java知多少(24)包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯, ...

  8. Java知多少(36)内部类及其实例化

    在 Java 中,允许在一个类(或方法.语句块)的内部定义另一个类,称为内部类(Inner Class),有时也称为嵌套类(Nested Class). 内部类和外层封装它的类之间存在逻辑上的所属关系 ...

  9. html页面工具-htmlUnit

    HtmlUnit测试工具的推出,创意非常好.是一款给java开发用的browser.说它是browser,其实它是对html建模并且提供API来访问页面,点击链接等等的java类库.     这样的测 ...

  10. JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的 ...