校花转学到我们班,于是我用Python把她空间给爬了个遍!(3)

im.show()#用手机扫二维码登录qq空间

sleep(20)#等二十秒,可根据自己的网速和性能修改

print(browser.title)#打印网页标题

cookie = {}#初始化cookie字典

for elem in browser.get_cookies():#取cookies

cookie[elem[‘name’]] = elem[‘value’]

print(‘Get the cookie of QQlogin successfully!(共%d个键值对)’ % (len(cookie)))

html = browser.page_source#保存网页源码

g_qzonetoken=re.search(r’window.g_qzonetoken = (function(){ try{return (.*?);} catch(e)',html)#从网页源码中提取g_qzonetoken

gtk=getGTK(cookie)#通过getGTK函数计算gtk

browser.quit()

return (cookie,gtk,g_qzonetoken.group(1))

if name==“main”:

QR_login()

通过Requests库利用前面得到的url参数,构造http请求

通过抓包分析可以找到上图这个请求,这个请求响应的是说说信息

通过火狐浏览器的一个叫json-dataview的插件可以看到这个响应是一个json格式的,开心!

然后就是用正则表达式提取字段了,这个没什么意思,直接看我的代码吧

def parse_mood(i):

‘’‘从返回的json中,提取我们想要的字段’‘’

text = re.sub(‘“commentlist”:.*?“conlist”:’, ‘’, i)

if text:

myMood = {}

myMood[“isTransfered”] = False

tid = re.findall(‘“t1_termtype”:.?“tid”:"(.?)"’, text)[0] # 获取说说ID

tid = qq + ‘_’ + tid

myMood[‘id’] = tid

myMood[‘pos_y’] = 0

myMood[‘pos_x’] = 0

mood_cont = re.findall(‘],“content”:“(.*?)”’, text)

if re.findall(‘},“name”:“(.*?)”,’, text):

name = re.findall(‘},“name”:“(.*?)”,’, text)[0]

myMood[‘name’] = name

if len(mood_cont) == 2: # 如果长度为2则判断为属于转载

myMood[“Mood_cont”] = “评语:” + mood_cont[0] + “--------->转载内容:” + mood_cont[1] # 说说内容

myMood[“isTransfered”] = True

elif len(mood_cont) == 1:

myMood[“Mood_cont”] = mood_cont[0]

else:

myMood[“Mood_cont”] = “”

if re.findall(‘“created_time”😦\d+)’, text):

created_time = re.findall(‘“created_time”😦\d+)’, text)[0]

temp_pubTime = datetime.datetime.fromtimestamp(int(created_time))

temp_pubTime = temp_pubTime.strftime(“%Y-%m-%d %H:%M:%S”)

dt = temp_pubTime.split(’ ')

time = dt[1]

myMood[‘time’] = time

date = dt[0]

myMood[‘date’] = date

if re.findall(‘“source_name”:“(.*?)”’, text):

source_name = re.findall(‘“source_name”:“(.*?)”’, text)[0] # 获取发表的工具(如某手机)

myMood[‘tool’] = source_name

if re.findall(‘“pos_x”:“(.*?)”’, text):#获取经纬度坐标

pos_x = re.findall(‘“pos_x”:“(.*?)”’, text)[0]

pos_y = re.findall(‘“pos_y”:“(.*?)”’, text)[0]

if pos_x:

myMood[‘pos_x’] = pos_x

if pos_y:

myMood[‘pos_y’] = pos_y

idname = re.findall(‘“idname”:“(.*?)”’, text)[0]

myMood[‘idneme’] = idname

cmtnum = re.findall(‘“cmtnum”😦.*?),’, text)[0]

myMood[‘cmtnum’] = cmtnum

return myMood#返回一个字典

我们想要的东西已经提取出来了,接下来需要设计数据表,通过navicat可以很方便的建表,然后通过python连接mysql数据库,写入数据。这是创建数据表的sql代码

CREATE TABLE mood (

name varchar(80) DEFAULT NULL,

date date DEFAULT NULL,

content text,

comments_num int(11) DEFAULT NULL,

time time DEFAULT NULL,

tool varchar(255) DEFAULT NULL,

id varchar(255) NOT NULL,

sitename varchar(255) DEFAULT NULL,

pox_x varchar(30) DEFAULT NULL,

pox_y varchar(30) DEFAULT NULL,

isTransfered double DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其实到这里爬虫的主要的代码就算完了,之后主要是通过QQ邮箱的联系人导出功能,构建url列表,最后等着它运行完成就可以了。这里我单线程爬200多个好友用了大约三个小时,拿到了十万条说说。下面是爬虫的主体代码。

#从csv文件中取qq号,并保存在一个列表中

csv_reader = csv.reader(open(‘qq.csv’))

friend=[]

for row in csv_reader:

friend.append(row[3])

friend.pop(0)

friends=[]

for f in friend:

f=f[:-7]

friends.append(f)

headers={

‘Host’: ‘h5.qzone.qq.com’,

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0’,

‘Accept’: ‘/’,

‘Accept-Language’:‘zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3’,

‘Accept-Encoding’: ‘gzip, deflate, br’,

‘Referer’: ‘https://user.qzone.qq.com/790178228?t=0.22746974226377736’,

‘Connection’:‘keep-alive’

}#伪造浏览器头

conn = MySQLdb.connect(‘localhost’, ‘root’, ‘123456’, ‘qq_mood’, charset=“utf8”, use_unicode=True)#连接mysql数据库

cursor = conn.cursor()#定义游标

cookie,gtk,qzonetoken=QRlogin#通过登录函数取得cookies,gtk,qzonetoken

s=requests.session()#用requests初始化会话

for qq in friends:#遍历qq号列表

for p in range(0,1000):

pos=p*20

params={

‘uin’:qq,

‘ftype’:‘0’,

‘sort’:‘0’,

‘pos’:pos,

‘num’:‘20’,

‘replynum’:‘100’,

‘g_tk’:gtk,

‘callback’:‘_preloadCallback’,

‘code_version’:‘1’,

‘format’:‘jsonp’,

‘need_private_comment’:‘1’,

‘qzonetoken’:qzonetoken

}

response=s.request(‘GET’,‘https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6’,params=params,headers=headers,cookies=cookie)

print(response.status_code)#通过打印状态码判断是否请求成功

text=response.text#读取响应内容

if not re.search(‘lbs’, text):#通过lbs判断此qq的说说是否爬取完毕

print(‘%s说说下载完成’% qq)

break

textlist = re.split(‘{“certified”’, text)[1:]

for i in textlist:

myMood=parse_mood(i)

‘’‘将提取的字段值插入mysql数据库,通过用异常处理防止个别的小bug中断爬虫,开始的时候可以先不用异常处理判断是否能正常插入数据库’‘’

try:

insert_sql = ‘’’

insert into mood(id,content,time,sitename,pox_x,pox_y,tool,comments_num,date,isTransfered,name)

VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)

‘’’

cursor.execute(insert_sql, (myMood[‘id’],myMood[“Mood_cont”],myMood[‘time’],myMood[‘idneme’],myMood[‘pos_x’],myMood[‘pos_y’],myMood[‘tool’],myMood[‘cmtnum’],myMood[‘date’],myMood[“isTransfered”],myMood[‘name’]))

conn.commit()

except:

pass

print(‘说说全部下载完成!’)

下面是爬取的数据,有100878条!(没想到居然有这么多)

拿到数据后,我先用sql进行聚合分析,然后通过ipython作图,将数据可视化。

统计一年之中每天的说说数目,可以发现每年除夕这一天是大家发说说最多的一天(统计了2013到2017年)

通过两个辅助表,可以看到分年,分月,分小时段统计的说说数目,下面是代码和数据图

其余的几个图代码都是类似的,我就不重复发了。(其实主要是cmd里面复制代码太不方便了,建议大家用ipython notebook)

额,可以看出2014年9月达到了一个高峰,主要是因为我的朋友大都是是2014年九月大学入学的,之后开始下降,这可能是好多人开始玩微信,逐渐放弃了QQ,通过下面这个年变化图可以更直观的看出

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于引用的描述,这个Python虫软件是一款可以用来取无水印照片的软件。它可以取各种类型的照片,如御姐、美女、校花、萝莉、帅哥、型男等等,并且支持批量保存。该软件是用Python编写的,但据引用所述,它可能只能在Windows 10系统上运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于python的各大网站虫学习源码+代码注释.zip](https://download.csdn.net/download/RuanJian_GC/88227791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python虫软件](https://download.csdn.net/download/heian_99/10892748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [有哪些好用的虫软件?](https://blog.csdn.net/tingting11232/article/details/128949931)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值