Python采集天涯论坛热评举行心情分析祝你狗年脱单资讯

Ps: 主要的事体说一次!!!
末尾有彩蛋,结尾有彩蛋,结尾有彩蛋。

近年来七天以来,微信小程序游戏“跳一跳”可谓是刷爆朋友圈。可是你会发觉名次榜上的好友玩出了动辄上千上万的分数,那背后的门道是怎样呢?

倘使协调须求爬(cai)(ji)的数据量相比大,为了防备被网站封Ip,可以分时段爬取,此外对于爬到的数码貌似是用来储存数据库,那就须要对数据举行去重处理,记录上次爬取的情状,就足以兑现在爬虫中断后,能够连忙持续上次的状态,完结增量爬取,那里可以参照我事先写过的一个快讯采访,增量采集新闻数据,本文写的对网易乐乎的数量收集和拍卖一体化代码在自我的Github
玩和讯的人一大半应当了解天涯论坛搞笑名次榜的,刚好写那篇文往日看来榜姐八月8号0点话题是一人说一个,追女孩的小道理,感觉这么些话题几乎是对周边单身男性的有益啊,ヾ(✿゚゚)ノ,故有了何不就搜集一下讲评来分析一波的想法。

哈哈,当然就是“开挂”啦!

1.用到天涯论坛新浪提供的API对数码进行采访

作为一个爬虫菜鸟来说,假设不会利用代理IP池,同时对网站的反爬机制不太领悟,提出先去看下网站是还是不是友善提供的有API,后天大家要爬取的网站是和讯博客园,当然网易网作为为天下用户24钟头提供完善及时的粤语消息的大网站,一定是提供温馨的API接口的。那样的大网站,必定是涉世了诸多场爬虫与反爬之间的烟尘,也迟早有很完善的反爬策略,所以大家可以经过调用腾讯网搜狐的开放平台来得到大家想要的音讯。使用在此以前请详细阅读API文档,在开放平台认证为开发者,附App
key链接

# 如果这里引入失败,可以直接下载SDK和文件放一块就ok
from weibo import APIClient 
import webbrowser

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

APP_KEY = '你的App Key '  # 获取的app key 
APP_SECRET = '你的AppSecret'  # 获取的appsecret 
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html' #回调链接 

# 在网站设置"使用微博账号登陆"的链接,当用户点击链接后,引导用户跳转至如下地址  
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) 
# 得到授权页面的url,利用webbrowser打开这个url  
url = client.get_authorize_url() 
webbrowser.open_new(url) #打开默认浏览器获取code参数 

# 获取URL参数code:
print '输入url中code后面的内容后按回车键:'

code = raw_input() # 人工输入网址后面的code内容  
r = client.request_access_token(code)  # 获得用户授权 
access_token = r.access_token   # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in
# 设置得到的access_token,client可以直接调用API了
client.set_access_token(access_token, expires_in)

获取某个用户最新公布的天涯论坛列表

uid
的得到形式,大家点开分裂的博客园,会意识链接中https://m.weibo.cn/u/2706896955?sudaref=login.sina.com.cn&display=0&retcode=6102
u之后的数字就是用户的uid。

content = client.statuses.user_timeline(uid=2706896955, count=100)

归来的结果是json格式的

{
    "statuses": [
        {
            "created_at": "Tue May 31 17:46:55 +0800 2011",
            "id": 11488058246,
            "text": "求关注。",
            "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
            "favorited": false,
            "truncated": false,
            "in_reply_to_status_id": "",
            "in_reply_to_user_id": "",
            "in_reply_to_screen_name": "",
            "geo": null,
            "mid": "5612814510546515491",
            "reposts_count": 8,
            "comments_count": 9,
            "annotations": [],
            "user": {
                "id": 1404376560,
                "screen_name": "zaku",
                "name": "zaku",
                "province": "11",
                "city": "5",
                "location": "北京 朝阳区",
                "description": "人生五十年,乃如梦如幻;有生斯有死,壮士复何憾。",
                "url": "http://blog.sina.com.cn/zaku",
                "profile_image_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
                "domain": "zaku",
                "gender": "m",
                "followers_count": 1204,
                "friends_count": 447,
                "statuses_count": 2908,
                "favourites_count": 0,
                "created_at": "Fri Aug 28 00:00:00 +0800 2009",
                "following": false,
                "allow_all_act_msg": false,
                "remark": "",
                "geo_enabled": true,
                "verified": false,
                "allow_all_comment": true,
                "avatar_large": "http://tp1.sinaimg.cn/1404376560/180/0/1",
                "verified_reason": "",
                "follow_me": false,
                "online_status": 0,
                "bi_followers_count": 215
            }
        },
        ...
    ],
    "previous_cursor": 0,                     // 暂未支持
    "next_cursor": 11488013766,      // 暂未支持
    "total_number": 81655
}

回去的字段表明

一经大家想要查看的是天涯论坛音讯内容调用text即可

for info in content.comments:
         text = info.text

可是,我写那篇小说可不是为了教我们如何去开挂,而是让大家体会到总结机技术的精彩绝伦利用。有关游戏嘛,照旧要凭真本事去玩,那才有趣。

2.乐乎天涯论坛爬虫

chrome浏览器右键检查查看network那几个老套路我就背着了,不知晓可以翻Python网络爬虫(一)-
入门基础
从头开首看。
除此以外:代码是对准虎扑乐乎移动端
https://m.weibo.cn/
拓展新闻收集,之所以爬移动端而不是PC所有社交网站爬虫,优先选项爬移动版(不要来问我干吗好爬,我也不知晓

  • 可以看出最新评论的url是'https://m.weibo.cn/api/comments/show?id=' + 微博id + '&page=' + 页码

点来链接https://m.weibo.cn/single/rcListformat=cards&id=4193705642468999&type=comment&hot=0&page=2即为再次来到的json格式的数据

接下去直接上代码

import re
import time
import requests

uid = '4193705642468999'
url = 'https://m.weibo.cn/single/rcList?format=cards&id=' + uid + '&type=comment&hot=0&page={}'
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Cookie": "你的cookie",
"Host": "m.weibo.cn",
"Referer": "https://m.weibo.cn/status/" + uid,
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Mobile Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}

i = 0
comment_num = 1  # 第几条评论
while True:
res = requests.get(url=url.format(i), headers=headers)
r = res.json()
content = r[0]['card_group']
if r.status_code == 200:
    try:
        for j in range(0, len(content)):
            hot_data = content[j]
            comment_id = hot_data['user']['id']  # 用户id
            user_name = hot_data['user']['screen_name']  # 用户名
            created_at = hot_data['created_at']  # 评论时间
            comment = re.sub('<.*?>|回复<.*?>:|[\U00010000-\U0010ffff]|[\uD800-\uDBFF][\uDC00-\uDFFF]', '', hot_data['text'])  # 评论内容
            like_counts = hot_data['like_counts']  # 点赞数
            comment_num += 1
        i += 1
        time.sleep(3)
    except Exception as e:
        logger.debug(e)
else:
    break

接下去就是对数据的保留和处理了。
注意:
博客园究竟是大厂,对爬虫肯定有友好的反爬策略,为了防范访问频仍被封禁,能够设置代理ip池,限制抓取时间等等。你问我怎么明白的,我才不会告知你~

若果你出现了那一个页面或者采集不到任何音信,恭喜您,被今日头条偏爱了

率先,开挂的章程有各个,最简便易行严酷的措施就是抓包并曲解游戏向服务器交由的数量。用那种艺术可以轻松获得自由分数,可是现在一度失效了。而自我在那里涉及的是一种争辨无害的法子,并不改动笔记本身的多少,只是依靠程序救助我们统计游戏中的目的相差并形成自动化操作。

3.数据的积存和处理

因为后天更多的铺面开始逐步使用PostgreSQL作为公司数据库,那里大家就把数据存储于Postgresql,为了使大家的整个项目尤其工程化,我们把对数据库的操作单独定义方法。

# 对数据库实现查询的方法
def execute_select(conn, sql, params=None):
    with conn.cursor() as cur:
        if params:
            cur.execute(sql, params)
        else:
            cur.execute(sql)
        return cur.fetchall()

# 对数据库实现增删改的方法
def execute_sql(conn, sql, params=None):
    with conn.cursor() as cur:
        if params:
            cur.execute(sql, params)
        else:
            cur.execute(sql)

大功告成了大体上,运行代码 –> 保存数据库
接下来自然是对我们占领的数码开展分(hu)析(shuo)展(ba)示(dao)了(千年不变的套路hhhhhh..)

那里大家得以见见数据已经成功存储与数据库

简单的讲通晓,就是让电脑代替人来玩那一个游戏。

4.数据的处理和剖析

既然如此说到对普通话数据的处理和显示,大家常用的就二种艺术,词云、心情分析、数据可视化展示,那里我就不能够不提到python中比较闻名的一个中文NLP库:snowNLP,snowNLP可以基于提交的句子生成一个0-1之间的值,当值大于0.5时表示句子的情愫极性偏向积极,当分值小于0.5时,心理极性偏向丧气,越偏向三头,心情就越敏感。使用一个库最简便易行暴力的主意———读官方文档。

snownlp的应用也很简短

我随便抽取了两张结果,不难标注了刹那间,大家简单窥见涉嫌到主动、长得帅、有钱的、要勇敢、口红、情商那多少个词生成的值都在0.9,矮矬穷、渣、你他妈那几个词生成的值都在0.5以下,林佳,给自身留一口啊!是什么样鬼,竟然0.7???

  • 虽说数据量大(其实是未曾去除停用词ヾ(✿゚゚)ノ)导致的词云图效果不太好,可是我们如故得以见到聊天、主动、好看那多少个词的词频较高,至于怎么我不剔除停用词,是因为没有语料库依旧因为不会用,都不是,因为我懒,我懒,我懒…
    剔除停用词的课程此前写的稿子中有:Python数据科学(三)-
    python与数量正确使用(Ⅲ)

def word_cloud(comment):
    logger.info('制作词云图...word_cloud')
    comment_text = ''
    back_coloring = imread("static/heart.jpg")
    cloud = WordCloud(font_path='static/simhei.ttf', 
                      background_color="white",  # 背景颜色
                      max_words=2000,  
                      mask=back_coloring,  
                      max_font_size=100,  
                      width=1000, height=860, margin=2,  
                      random_state=42,
                      )
    for li in comment:
        comment_text += ' '.join(jieba.cut(li, cut_all=False))
    wc = cloud.generate(comment_text)
    image_colors = ImageColorGenerator(back_coloring)
    plt.figure("wordc")
    plt.imshow(wc.recolor(color_func=image_colors))
    wc.to_file('微博评论词云图.png')
  • 对拍卖过得心理值列表进行总括,并扭转分布图,采集的评头品足大致有5w条

def snow_analysis(comment):
    logger.info('自然语言处理NLP...snow_analysis')
    sentimentslist = []
    for li in comment:
        s = SnowNLP(li)
        # logger.debug(li)
        # logger.debug(li, s.sentiments)
        print(li, s.sentiments)
        sentimentslist.append(s.sentiments)
    fig1 = plt.figure("sentiment")
    plt.hist(sentimentslist, bins=np.arange(0, 1, 0.02))
    plt.show()

腾讯网 一个人说一个,追女孩的小道理 评论的心情值分布

可以观望心境值在看似0.6~1.0左右地点频率较高,表达粉丝们对此这则今日头条的评说积极态度占绝半数以上,因为那个虎扑本身就是偏积极性的,得出的结果也作证了那几个题材。

我们的初衷是为了什么追女生,我就统计了瞬间产出比较多的褒贬(有博主为了抢热门频仍刷评论?),三行代码就可以搞定,那几个Counter的用法往日也写过,传送门:使用python中的第三方库Counter

# 使用python的第三方库
from collections import Counter
userdict = Counter(comment_list)
print(userdict.most_common(8))

1.早晚要百尺竿头更进一步啊 不然等女人主动吗!可是主动也要相宜
别让对方以为恐怖…

2.灵魂要好,三观要科学,义务感,孝顺善良这个内在因素也很关键

3.追某部女孩时 只追他一个人 千万别撩外人

4.言谈幽默风趣但决不轻佻

5.对她当女儿养吧

6.女人是要用来宠的,不是来跟他讲道理的。

7.多陪她拉扯,多关怀她,爱护他,敬服他,通晓他,宠她,尊重她,给她安全感

8.不用暧昧不清,不要套路

以下的操作方法针对 Android 手机,电脑上选拔 Windows 系统。 iOS
上的方案也是部分,可是我并未亲自测试过,就不在那里提及。

文末彩蛋:

有过多男生抱怨自己追不到喜欢的丫头,追了多少个礼拜就抛弃了。其实,要转移的是你协调,只要努力开拓进取,让祥和变得更赏心悦目,同时对孙女保持适当的关怀和热心,持之以恒多少个月,将来肯定有那么一天你就会意识,不欣赏就是不欣赏那是不曾艺术的事情。

末尾,由于那篇博客是二零一八年先是篇博客,那么就祝我们狗年脱单了~

准备 Python

https://www.python.org/

Python
是今日最抢手的编程语言之一,拥有大批量添加而强劲的库。这次我们需求用到
Python 编写的脚本程序,所以一旦您电脑上还向来不设置 Python 3.x
和其包管理工具 pip3 的话,可以在 Python
官网上获取并设置。安装收尾之后,还要加上到 Windows 的环境变量中。

这次我们需求用到 Pillow 库。那是 Python
里的图像处理库,提供精晓广泛的文件格式支持和强大的图像处理能力。安装的法门很简短,在
CMD 中输入以下命令:

pip3 install pillow

按下回车,倘使出现确认音信的话,输入 “y” 再按回车即可。

准备 ADB Shell

http://adbshell.com/downloads

ADB 工具得以让大家在统计机上用命令行轻松调试 Android
手机。打开以上网址的页面并采用 ADB Kits 进行下载。

设置收尾之后,大家用数据线将手机连上电脑。那时候大家必要在手机上认可允许开启“USB
调试”的功力。

别的,有些手机厂商为了安全起见,在系统设置中关闭了 ADB
模拟点击的权能。大家需求手动开启,以 MIUI
为例,大家须求在开发者选项中开拓那项开关:

获取“外挂”脚本

https://github.com/wangshub/wechat\_jump\_game

大家得以在 Github 上下载自动操控“跳一跳”的项目代码。感谢 wangshub
为大家准备了现成的代码,你只须求在这一个页面下载即可。

对下载后的 ZIP 压缩包进行解压,得到一个文件夹。把刚刚下载的 ADB
工具那多少个文本移动到这么些文件夹中,待会儿大家的本子程序才能因而 ADB
工具控制手机。

一体就绪

将手机连上电脑,在手机微信上开拓“跳一跳”游戏的界面。

在大家下载的本子文件夹中找到 wechat_jump_auto.py,在其右键菜单中选拔IDLE 打开。为何不直接在 CMD 或者 Powershell
里运行吧?因为自己发觉脚本中的普通话字符使得在决定台下运行的时候会招致错误(可能是因为我动用英文版系统的原因)。

直白按 F5,运行脚本。

其后先后就会直接运转下去,你相会到手机上的棋类初叶协调跳动。在那进程中,电脑上会不断弹出空白的操纵台窗口并很快烟消云散。

即使先后操控也会有失手的时候,不过玩出高分战绩肯定是还是不是难题的。

结语

本期的上课到底那里就驾鹤驾鹤归西啦。经过本次“开挂”体验,大家也对 Python、ADB
等工具的运用有了更加多的体会。最后刷出来的实绩是或不是能留在排名榜上并不根本,主要的是大家学到了事物,并且感受到了充足的意趣。

其它说句题外话,我只能吐槽一下那游戏的难度。要想手动跳过这一步,真不知要花掉多少运气
><

祝我们玩得和颜悦色!我还会和大家大饱眼福越来越多有意思的技艺和互连网消息。

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注