python-爬虫:取qq号中各分组成员信息存入数据库,并将qq头像下载保存到文件夹,图片命名为qq号(实例3)
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)的更多相关文章
- Python爬取贴吧中的图片
#看到贴吧大佬在发图,准备盗一下 #只是爬取一个帖子中的图片 1.先新建一个scrapy项目 scrapy startproject TuBaEx 2.新建一个爬虫 scrapy genspider ...
- Python抓取单个网页中所有的PDF文档
Github博文地址,此处更新可能不是很及时. 1.背景 最近发现算法以及数据结构落下了不少(其实还是大学没怎么好好学,囧rz),考虑到最近的项目结构越来越复杂了,用它来练练思路,就打算复习下数据结构 ...
- 小白学 Python 爬虫(5):前置准备(四)数据库基础
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- python爬虫1——获取网站源代码(豆瓣图书top250信息)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- python爬取返利网中值得买中的数据
先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy 查找目标数据使用的是beautifulsoup模块. 1.观察网页,寻找规律 打开值得买这块内容 1>分析 ...
- python爬取365好书中小说
需要转载的小伙伴转载后请注明转载的地址 需要用到的库 from bs4 import BeautifulSoup import requests import time 365好书链接:http:// ...
- Python爬虫框架Scrapy获得定向打击批量招聘信息
爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是.抓取特定站点网页的HTML数据.只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址, ...
- Java-如何挖取某个网站中的ajax请求信息
通常情况,通过网络爬虫挖取到的基本为网页静态内容,而动态ajax取数的内容是我个人暂时不知如何一次性把网站中的ajax获取 这里介绍的是某个网站中的某一个ajax多某个table刷新,期数据,并提供其 ...
- 【Python爬虫】如何确定自己浏览器的User-Agent信息
User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本.浏览器及版本等信息.在做爬虫时加上此信息,可以伪装为浏览器:如果不加,很可能会被识别出为爬虫. 那么如 ...
随机推荐
- 《ZooKeeper分布式专题与Dubbo微服务入门》
最近在慕课网新上的课程,有兴趣的朋友可以关注一波 http://coding.imooc.com/class/201.html
- FFmpeg: AVPacket 结构体分析
AVPacket是FFmpeg中很重要的一个数据结构,它保存了解封装之后,解码之前的数据(注意:仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts).解码时间戳(dts).数据时长 ...
- idea 添加项目到svn
version control 改变项目为svn管理 如图 分享 share dic 添加新地址 share 剩下的 就是设置忽略目录 提交
- [Android]Android数据的四种存储方式
存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...
- 再战android-语音识别2(修改配置)
可怕的半桶水一直在晃.程序中需要根据用户的选择设置语音识别的语言(目前科大讯飞支持英文.普通话.粤语),不想每次要用户去IatSetting中去改,需要能直接修改IatSetting的设置.之前移植的 ...
- 【QT】第一个QT程序(点击按钮,显示特定文本)
1.基类选 QWidget 2.添加UI Btnshowhello 按钮 labelhello 文本标签 要注意:文本字样和对象名的区别! 对象名和UI部件是一一对应的关系. 修改对象名和修改文本字样 ...
- Android异步处理系列文章四篇之三
Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...
- 13组合模式Composite
一.什么是组合模式 Composite模式也叫组合模式,是构造型的设 计模式之一.通过递归手段来构造树形的对象结 构,并可以通过一个对象来访问整个对象树. 二.组合模式的结构 三.组合模式的角色和职责 ...
- iOS开发-- Xcode 6单元测试
占坑 http://m.oschina.net/blog/377800 http://www.cnblogs.com/sunshine-anycall/p/4155649.html http://ob ...
- Excel VBA 教程
https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.acc ...