【大数据杀熟】一词近来相当火热,大哥邀我和他一起利用假期做了这个项目,我负责知乎上有关【大数据杀熟】全量信息的抓取,以及绘制词云,记录一下我遇到的问题以及一些学习心得。 我们的推文,欢迎关注【带吧网络】公众号哟~~
关于爬虫
简单点,爬虫的方式简单点
知乎登录的问题。 我在抓取知乎上的信息时发现必须保持登录状态才可以获得信息,但是模拟登录知乎重写代码有点麻烦,大哥跟我说了一个非常方便非常简单的办法,在添加headers时将cookie也加进去,直接全部复制就行了。
在抓包的过程当中有些url很复杂,这时我们可以尝试简化url,这样既省事,在某种程度上还可以减少被反爬的概率,比如当时我在抓取评论信息的时候遇到这个错误:ProxyError:HTTPSConnectionPool(host='www.zhihu.com', port=443): Max retries exceeded with url 一开始我以为是ip被封了,然后在室友电脑上尝试了之后发现也是如此,最后经过大哥的指点删掉部分url的组成便可成功运行了。
数据库存储问题,一开始我是将评论的全部信息都存入数据库,然而总是存储失败,报语法错误,原因是评论信息当中有表情符,我在数据库存储的字符集设置的是utf8,mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。我们需要将字符集更改为utf8mb4,这里的更改涉及到三处,分别是在程序中修改charset的定义,在Navicat for MySQL存储评论信息的那一栏的字符集设置为utf8mb4,排序规则设置为utf8mb4_unicode_ci,就OK了。
还有一个有意思的事情,在一开始爬知乎的时候爬到的网页信息里面显示我的浏览器版本太低了,需要我更新浏览器,导致这种情况的发生是因为user-agent,这是浏览器的身份验证,所以我们只需要打开开发者工具将我们的实际浏览器中出现的user-agent复制然后添加到headers当中就可以了,为啥我会出现那个问题,是因为我是直接复制的我去年为了防止反爬在网上抓下来的一大片user-agent,这些已经旧了……
手机端比PC端爬起来要简单些,反爬机制比较少,所以以后再爬数据的时候要先考虑切换成移动端,直接在浏览器的组件里面添加一个名叫User-Agent Switcher 的插件就可以随意的进行切换了.
关于词云:
刚开始写的时候我还有点紧张,觉得自己完成不了,后来发现也没那么难,所以希望自己以后遇到任何问题都够保持兴奋的态度去迎接而不是逃避
停止词表的问题,在抓取的数据当中不可避免的会有很多垃圾词,包括一些不重要的常用语,这些都是我们并不希望出现在我们词云上的,所以需要用到停止词表,停止词表玩网上一抓一大把,我在网上找了一个,但是还是出现了很多不想出现的词语,所以我可以随意的添加那些“垃圾词”,把他们谈加进我的停止词表中之后,他就永远都不会出现在我的词云上啦。
语料库的问题,比如本次分析的【大数据杀熟】,评论中频繁出现【去哪儿】,但是这个词并未在我的词云中显示,原因是【去哪儿】这个词语根本不在我的语料库里面,所以我们可以使用jieba.add_word(segment)这个函数将我们希望出现的词语加入语料库。
词云还有一个特点是,当你自定义添加背景图片的时候,你所选择的背景图片的清晰度决定了你生成的词云图的清晰度,所以我后来都找1000+*1000+的图,因为这样看起来舒服,但是,有一张实在是太清晰了还是为何(.png格式),我就是无论如何都生成不了,当我降低了他的清晰度,另存为.jpg型图片之后就完成了。
词云图中出现重复的词语,滴滴是【大数据杀熟】的话题中心,滴滴在评论中出现的次数是相对于其他企业而言的好几倍,所以一个词都少了要显示好几个词……(应该是这样的吧,在我删掉一些滴滴之后就只显示一个了)
关于数据分析
这几日,我似乎越发觉得数据分析是一个相当帅气的岗位了,一个要求内外兼修的岗位,对内要有互联网思想,对外要敲得一手好代码,总之,不要害怕,迎接挑战吧,Practice makes perfect.
对大数据杀熟的一点小小想法
不可否认利用大数据杀熟是一种严重欺骗消费者的行为,但是这些大厂确实已经渗入我们生活的方方面面,当真因为这个而停止使用他们的产品那我们的生活岂不要回到市场经济时代?那多麻烦啊,哎,这可能是真爱吧,明明知道他欺骗了我,但是已经习惯了和他在一起的生活,所以我还离不开他了……这样一描述的话感觉自己贱贱的,但是本来生活就已经很忙碌了,真的没有太多心思去比较这些了,还是好好赚钱吧,这样被坑了也不心疼,各取所需咯,想通了感觉自己也不亏,有钱没钱自己长个心眼,既然已经离不开他,要想解决根本问题那就是他的心灵发生质的变化,昂,大家都是明白人,这种可能性是灰常微小滴,生活还有很多美好的事情等着我们去发现呢,大数据杀熟,要杀就杀吧,愿自己能一直有资本被坑……
关于Team
这个项目是大哥带我做的第一个项目,但这次我拖后腿了,深感羞愧,日后还会和大哥做很多项目,我要变得强大起来,不当猪队友,要当超神队友,加油,Team!
附上代码:
"""__author__: zhaojieyu"""
""" create at: 2018/4/4"""
""" 爬虫部分 """
import requests
import re
import time
import pymysql
import json
import random
class MySQL:
def __init__(self):
self.conn = pymysql.connect(
host=
'localhost',
port=
3306,
user=
'zhaojieyu',
passwd=
'zhaojieyu19980204',
charset=
'utf8mb4',
db=
'demo1'
)
self.cursor = self.conn.cursor()
def insert_data(self, data_dict):
sql =
"INSERT INTO big_data_zhihu_copy1(article_id,article,author_url,comment_count,voteup_count,created_time, comment)" \
"VALUES ( '%d','%s', '%s', '%d','%d','%s','%s')" % (
data_dict[
'article_id'], data_dict[
'article'], data_dict[
'author_url'],
data_dict[
'comment_count'], data_dict[
'voteup_count'], data_dict[
'created_time'],
data_dict[
'comment'])
self.cursor.execute(sql)
print(
"提交入库中……")
self.conn.commit()
self.conn.close()
print(
"入库成功。")
class Get_data:
def get_header(self):
cookies =
'__DAYU_PP=mrBInEUIfzU2i7zeZaFr7ca3a65d3f67; _xsrf=9aef2a36-c891-4945-9fe0-aace8ff2dd5c; ' \
'q_c1=b52e3986ac234309a67d3b7626e25830|1522849814000|1522849814000; ' \
'_zap=9b71c26d-21c2-4b9d-a487-0273a0dd51c2; ' \
'capsion_ticket="2|1:0|10:1522894651|14:capsion_ticket|44' \
':NTdlOTNmNDRkZjJiNGUzMzkxMmJiMjAxYTkwODFjODg' \
'=|6a1472dfb88ce3afe77884cfc0f181ee0d337fb607d1d1da2dba7fbf699b21c3"; l_n_c=1; ' \
'l_cap_id="ZTFjNjI5MTU1YTEwNGNkNjg3MDkyZjMwYmNlZDQ5OTM=|1522890148' \
'|f1a1b403b07fe597c9137b493fc701f4dbfb7ad4"; ' \
'r_cap_id="NWFhZmE2ZmMyMmZjNDgzYjgwNTdlMjM5MTEzNWJkZTY=|1522890148' \
'|cf2c80891234acdb72ca4d4f73985af18ad5a672"; ' \
'cap_id="ZWRlOThiY2IwZDc0NDIxMmEyZWE3ZjI4NmZhZGQzN2U=|1522890148' \
'|d9a722470634ade6e552942b67b650e5b5998b33"; ' \
'd_c0="AICud0VXZA2PTuISbPPqKjwXhClK1ELd0Xc=|1522852063"; ' \
'z_c0="2|1:0|10:1522894666|4:z_c0|92' \
':Mi4xYnNoSkJnQUFBQUFBZ0s1M1JWZGtEU1lBQUFCZ0FsVk5TdFd5V3dEU1Rwckw3SGhsSzdoYVZhNmxDREdFUUhTMGRR' \
'|64b70d89d61218cfdb25ff4823d8b21c46874d84ff1b8210354d0941e41d7d4a" '
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0',
'x-udid':
'AICud0VXZA2PTuISbPPqKjwXhClK1ELd0Xc=',
'Cookie': cookies
}
return headers
def get_question_ids(self):
"""抓取知乎网有关大数据杀熟的前四个热门讨论区id"""
headers = self.get_header()
big_data_url =
"https://www.zhihu.com/api/v4/search_v3?t=general&q=大数据杀