学习!学习!!学习!!!学习之外目的到此为止!

上东东的时候,突然给我弹了一个充气娃娃的广告,于是就点进去就看了一下评论,全是神评论啊。所以我就想着把大神们的评论们扒拉下来仔细瞅瞅,于是这篇文章就诞生了 ,纯属学习啊,不要想入非非啊,还有,不喜勿喷!

首先我先找了某东最火娃娃,里面评论8w+条,这里面神评论一定不少。所以决定从这个里面扒拉我们想要获取的数据

因为一些网站不喜欢外界的爬虫消耗自己的服务器的大量资源,因此它们会有自己反爬虫程序。如果不使用代理的话,他们就能识别出你是爬虫,从而给你进行重定向无数次,导致你的爬虫报错。所以我们要对我们的爬虫进行伪装。

那就需要带上我们的防爬header三兄弟了。当然这只是最基本的防爬措施。更多的反爬措施和技巧可以参考曾经它让我恼怒抓狂,但是现在我对它是赞不绝口!

cookie – 侧重于用户的类型,这里具体指的就是登录的用户呢还是游客

refer – 指的是用户从哪个页面发出网络的访问和数据的请求

user-agent 指的是访问后台服务器的是哪一个浏览器

首先找到咱们防止反爬的必须参数。

在获取数据的时候把它们加在header里面就可以获取到非空数据了。

接下来咱们先试试。

可以看到我们已经成功地获取到数据了。但是数据格式还需要进一步的处理。首先咱们来分析一下获取到的数据。

获取到的数据前面多了20位的’fetchJSON_comment98(‘,后面多了四位的’]}’。所以我们首先要去掉这些多余的修饰符使之成为完成的json格式的数据。

json_data = response.text[20:-2]

再来看看运行结果:

好了,已经初步实现了我们的目标。因为在咱们的目标只是评论而无需其他的参数。所以现在去网页分析一下这些评论所在的位置。

可以看到我们想要的评论内容是在comments下面的content中,所以我们首先定位到comments中然后循环获取content里面的内容。

for comment in  comments_all:

    print(comment[‘content’])

好了我们现在已经成功的获取到了第一页的内容,后面的评论需要进行翻页操作,所以我们多翻几页找规律。

pageSize=10每页固定显示10条记录。

不同之处就在于这个参数page,所以可以确定页数是由它来控制的。所谓以我们可以设置一个变量来控制它,从而获取到全部页数的评论。

对get_spider_comments方法加入变量page,当我们指定page的值时,它就可以获取固定页面的评论。

在batch_spider_comments方法中sleep方法,用来模拟用户浏览,防止因为爬取太频繁导致ip被封。

for i in range(100):

    print(‘正在爬取’ + str(i+1) + ‘页数据….’)

    get_spider_comments(i)  #批量获取评论方法

    print(‘爬虫结束!’)

可以成功的获取到所要爬取的页数的全部数据!

接下来咱们爬取数据的任务已经结束了。现在呢我想通过词云可视化分析一下它火的原因。

for comment in  comments_all:

    with open(comments_file_path, ‘a+’, encoding=’utf-8′) as f:

        f.write(comment[‘content’] + ‘n’)

接下来看一下我们写入到文件的内容

需要通过词云分析时就需要数据,所以我们需要把获取到的评论先放存入文档,这里为了方便我就直接放入txt文档了。

首先需要我们对jieba和wordcloud进行了解,使用pip install jieba对jieba库进行安装。然后用jieba对获取到的评论进行分词。

with open(comments_file_path, encoding = ‘utf-8’) as fin:

    comment_text = fin.read()

    word_list = jieba.lcut_for_search(comment_text)

    new_word_list = ‘ ‘.join(word_list)

来看效果

然后使用pip install wordcloud再安装wordcloud。最后用generate方法生成词云图。

好了接下来我们就需要找一张自己心仪的图片来做分词操作了。

所以之后大家可以按照自己的意愿来设置图片的形状。

我选了一张萌萌哒的小狗的图片。我在这里引入了imageio的 imread方法 以获取原始图片dog.jpg的参数

然后使用mask=mask 传递形状参数,所以最后我们获取到的就是一张圆形的词云图

def create_word_cloud():

    mask = imread(‘dog.jpg’)

    wordcloud = WordCloud(font_path=’msyh.ttc’, mask = mask).generate(cut_words())

    wordcloud.to_file(‘dog.png’)

来看看实现词云效果之后的小狗图

好了目标已经实现。源码尚在整理中,想要学习的可以直接找我哦!

文章来源于互联网:爬虫实战| 8w+网友亲身体验,告诉你充气娃娃有多爽?

发表评论