一.施用知乎乐乎提供的API对数据开始展览采访

作为二个爬虫菜鸟来讲,假设不会选拔代理IP池,同时对网址的反爬机制不老聃楚,提出先去看下网址是还是不是和谐提供的有API,前几日大家要爬取的网址是今日头条网易,当然新浪网作为为天下用户二肆时辰提供全面及时的华语音讯的大网址,一定是提供本身的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

三.数据的仓库储存和拍卖

因为前日更增多的商店开头稳步使用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-第11中学间的值,当值大于0.5时表示句子的真情实意极性偏向积极,当分值小于0.伍时,心理极性偏向懊丧,越偏向五头,激情就越敏感。使用八个库最简易暴力的法子———读官方文书档案。

snownlp的使用也很简短

本身任性收取了两张结果,轻易标注了一下,大家轻巧窥见涉及到主动、长得帅、有钱的、要勇敢、口红、情商那多少个词生成的值都在0.玖,矮矬穷、渣、你他妈这么些词生成的值都在0.5之下,林佳,给本身留一口啊!是怎样鬼,竟然0.柒???

  • 即便数据量大(其实是未曾去除停用词ヾ(✿゚゚)ノ)导致的词云图效果不太好,可是我们还是能见到聊天、主动、好看那多少个词的词频较高,至于为何笔者不剔除停用词,是因为尚未语言材质库照旧因为不会用,都不是,因为笔者懒,笔者懒,作者懒…
    剔除停用词的科目从前写的文章中有: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')
  • 对拍卖过得激情值列表进行计算,并转移分布图,搜集的评说大约有伍w条

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()

天涯论坛 1人说一个,追女孩的小道理 评论的心情值分布

能够观望心境值在相近0.6~一.0左右地方频率较高,表达客官们对此那则新浪的评论积极态度占许多,因为那些博客园自身就是偏积极性的,得出的结果也注解了那几个难题。

小编们的初衷是为着什么追女生,笔者就总结了一下油不过生相比多的评价(有博主为了抢热点频繁刷评论?),三行代码就足以解决,那些Counter的用法以前也写过,传送门:使用python中的第3方库Counter

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

一.势须要积极啊 不然等女生主动吗!可是主动也要适可而止
别让对方认为恐怖…

二.品质要好,叁观要正确,权利感,孝顺善良那个内在因素也很重大

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

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

伍.对她当女儿养吧

陆.女生是要用来宠的,不是来跟她讲道理的。

柒.多陪她聊天,多关心他,爱护他,珍重她,驾驭她,宠她,尊重他,给他安全感

八.毫无暧昧不清,不要套路

文末彩蛋:

有大多汉子抱怨自个儿追不到爱好的丫头,追了多少个礼拜就吐弃了。其实,要退换的是你协调,只要努力向上,让本身变得更能够,同时对幼女保持适宜的关切和热情,百折不回多少个月,总有①天你就会发现,不喜欢便是不喜欢这是未曾主意的业务。

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

壹经协调须要爬(cai)(ji)的数据量一点都不小,为了以免万1被网址封Ip,能够分时段爬取,其余对于爬到的数目貌似是用来囤积数据库,这就须求对数据开始展览去重处理,记录上次爬取的动静,就足以兑未来爬虫中断后,能够长足持续上次的景色,完毕增量爬取,那里能够参考作者前边写过的二个音讯采访新濠天地老品牌xh,,增量搜集音信数据,本文写的对新浪今日头条的多寡搜罗和拍卖1体化代码在自个儿的Github
玩和讯的人繁多应当清楚天涯论坛滑稽排名榜的,刚好写那篇文在此以前看来榜姐四月八号0点话题是壹人说三个,追女孩的小道理,感觉那个话题大概是对广大单身男性的便民啊,ヾ(✿゚゚)ノ,故有了何不就搜罗一下评价来分析一波的想法。

Ps: 首要的事务说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池,限制抓取时间等等。你问作者怎么知道的,小编才不会告诉您~

假定你出现了那一个页面可能收集不到任何音讯,恭喜你,被新浪偏爱了

网站地图xml地图