资讯专栏INFORMATION COLUMN

Scrapy爬取hupu论坛标题统计数量并生成wordcloud

renweihub / 1446人阅读

摘要:爬取数据提取标题最终爬取了页多个标题分词并统计词的数量这里我使用了这个库来分词分出了个词然后统计数量这里我统计了两个词以下和两个词以上的词的量分配如图生成词云以及其他数据图表这里我是用的库生

爬取数据

huputitle_spiders.py

#coding:utf-8    
import scrapy   
from huputitle.items import HuputitleItem

from scrapy.crawler import CrawlerProcess 

class hupuSpider(scrapy.Spider):
    name = "huputitle"    
    allowed_domains = ["bbs.hupu.com"]    
    start_urls = ["https://bbs.hupu.com/bxj"]    
         
    def parse(self, response):    
        item = HuputitleItem()    
        item["titles"] = response.xpath("//a[@id=""]/text()").extract()#提取标题
        # print "titles",item["titles"]  
        yield item 
        new_url = "https://bbs.hupu.com" + response.xpath("//a[@id="j_next"]/@href").extract_first()
        if new_url:    
            yield scrapy.Request(new_url,callback=self.parse)  

items.py

# -*- coding: utf-8 -*-
import scrapy


class HuputitleItem(scrapy.Item):
    # define the fields for your item here like:
    titles = scrapy.Field()

pipelines.py

# -*- coding: utf-8 -*-
import os    
import urllib   
  
from huputitle import settings  

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

class HuputitlePipeline(object):
    def process_item(self, item, spider):
        for title in item["titles"]:
            # print "title",title
            fo = open("foo.txt", "a")
            fo.write("".join(title)+"
")
        fo.close()
        return item

settings.py

BOT_NAME = "huputitle"

SPIDER_MODULES = ["huputitle.spiders"]
NEWSPIDER_MODULE = "huputitle.spiders"

ITEM_PIPELINES = {  
    "huputitle.pipelines.HuputitlePipeline": 1,  
}

USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5"

最终爬取了100页2W多个标题


分词并统计词的数量

这里我使用了 jieba 这个库来分词
hupudivide.py

#encoding=utf-8  
import jieba  
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

fo = open("hupu.txt", "r")
fi = open("hupudi.txt", "w")
lines = fo.readlines()
for line in lines:
    seg_list = jieba.cut_for_search(line)
    fi.write(" 
".join(seg_list)) 

分出了17w个词

然后统计数量
huPuCounter.py

#encoding=utf-8  
import jieba  
import jieba.analyse
import time
from collections import Counter
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

fo = open("hupudi.txt", "r")
fi = open("hupunum.txt", "w")
fl = open("hupunumword.txt", "w")
f = open("hupuword.txt", "w")

lines = fo.readlines()

d = {}

for line in lines:
    if line not in d:
        d[line] = 1
    else:
        d[line] = d[line] + 1

d = sorted(d.items(),key=lambda item:item[1],reverse=True)

for k in d:
    fi.write("%s%d
" % (k[0][:-1].encode("utf-8"),k[1]))
    if len(k[0][:-1].encode("utf-8")) >= 6:
        fl.write("%s%d
" % (k[0][:-1].encode("utf-8"),k[1]))
        f.write("%s" % (k[0][:-1].encode("utf-8")))

这里我统计了两个词以下和两个词以上的词的量分配如图


生成词云以及其他数据图表

makeHupuCloud.py

#encoding=utf-8 
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba

text_from_file_with_apath = open("foo.txt").read()

wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all = False)
wl_space_split = " ".join(wordlist_after_jieba)

backgroud_Image = plt.imread("huputag.jpg")
my_wordcloud = WordCloud(background_color = "white",    
                mask = backgroud_Image,  ).generate(wl_space_split)

plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

这里我是用python的wordcloud库生成的词云,图片是hupu的logo


使用jieba的分词分出词性 生成的图表


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40703.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • python数据分析微博热门

    摘要:前者对中文进行分词后者图形化展示词语的出现频率。众所周知,中文系的语言处理恐怕是最难的自然语言处理的语种。研究中文自然语言处理将是一个长久而大的工程,对于分析数据我们不是要研究自然语言处理 接上篇,这一篇将从技术层面讲讲是如何实现的。阅读本文您将会了解如何用python爬取微博的评论以及如何用python word_cloud库进行数据可视化。 上一篇:程序员代码下的许豪杰 准备工作 ...

    firim 评论0 收藏0
  • 从零开始的Python爬虫速成指南

    摘要:内容如下是我们准备爬的初始页这个是解析函数,如果不特别指明的话,抓回来的页面会由这个函数进行解析。爬取多个页面的原理相同,注意解析翻页的地址设定终止条件指定好对应的页面解析函数即可。后面的数字表示的是优先级。指明每两个请求之间的间隔。 序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容。 本文受众:没写过爬虫的萌新。 入门 0.准备工作 需要准备的东西:...

    gotham 评论0 收藏0
  • 使用Scrapy框架爬取网页保存到Mysql

      小编写这篇文章的主要目的,主要是用来给大家做出一个解答,解答关于Scrapy框架的事情,主要是使用Scrapy框架,爬取网页,然后保存到一个专业数据库中,这个数据库就是Mysql,那么,其具体要怎么实现呢?下面就给大家详细的解答。  大家好,这一期阿彬给大家分享Scrapy爬虫框架与本地Mysql的使用。今天阿彬爬取的网页是虎扑体育网。  (1)打开虎扑体育网,分析一下网页的数据,使用xpat...

    89542767 评论0 收藏0
  • 快速上手——我用scrapy写爬虫(一)

    摘要:写在前面用写爬虫的人很多,的爬虫框架也很多,诸如和,笔者还是笔记倾向于,本文就用写一个小爬虫。本文适用于有一定基础的,并且对爬虫有一定了解的开发者。 写在前面 用python写爬虫的人很多,python的爬虫框架也很多,诸如pyspider 和 scrapy,笔者还是笔记倾向于scrapy,本文就用python写一个小爬虫demo。本文适用于有一定python基础的,并且对爬虫有一定了...

    curlyCheng 评论0 收藏0

发表评论

0条评论

renweihub

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<