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,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本.浏览器及版本等信息.在做爬虫时加上此信息,可以伪装为浏览器:如果不加,很可能会被识别出为爬虫. 那么如 ...
随机推荐
- logback配置详解
本文转自:https://segmentfault.com/a/1190000008315137 概览 简单地说,Logback 是一个 Java 领域的日志框架.它被认为是 Log4J 的继承人.L ...
- Python爬取金山词霸每日一句,存储到MySQL中
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/3 20:25 # @Author : baoshan # @Site : ...
- windows_硬盘上设置虚拟内存
1)在桌面上的“计算机”或“我的电脑”上右键->属性->高级->性能->设置->高级->虚拟内存->更改. 2)在虚拟内存更改页面,先选择在哪个磁盘上设置虚拟 ...
- SpringBoot普通类中如何获取其他bean例如Service、Dao(转)
工具类 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationC ...
- 给dubbo接口添加白名单——dubbo Filter的使用
本文转自:http://blog.csdn.net/mj158518/article/details/47379799 在开发中,有时候需要限制访问的权限,白名单就是一种方法.对于Java Web应用 ...
- npm和yarn的使用对比
NPM YARN 说明 npm init yarn init 初始化某个项目 npm install/link yarn install/link 默认的安装依赖操作 npm install taco ...
- Java知多少(43)异常处理基础
Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw).该方法可以选择自己处理异常或传递该异常.两种 ...
- Java知多少(69)面向字节的输入输出流
字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...
- Ogre2.1 Hlms与渲染流程
在我前面三篇说明Ogre2.x的文章里,第一篇大致说了下Hlms,第二篇说了下和OpenGL结合比较紧的渲染,本文用来说下Hlms如何影响渲染流程中,因为有些概念已经在前面二文里说过了,本文就不再提, ...
- C语言学习之路
c语言学习 初识c语言 c语言数据类型.运算符和表达式(整数浮点数) 字符型数据/字符串 算术运算符和算术表达式(优先级,结合性等) 顺序程序设计(运算符之类内容,字符输入输出等) C/C++ 查看数 ...