项目github地址:https://github.com/kocor01/spider_cloub/

Python版本为3.6

最近突然想玩玩云图,动手写了个简单的爬虫,搭建了简单的爬虫架构

爬虫爬取最近比较火的电影《芳华》分词后生成云图

使用了 jieba分词,云图用wordcloud生成

用了朋友的2B姿势的自拍照片简单的P了下(为了不暴露,P成全黑的),作为生成云图的底图模板

云图底图模板:

生成的云图效果:

爬虫基础框架

spider_main.py  爬虫入口
url_manager.py  URL管理器
html_downloader.py  网页下载器
html_parser.py  数据提取器
html_outputer.py  数据处理器
word_cloud.py  云图生成器

extra_dict文件夹文件如下:

li.png   云图底图模板

simhei.ttf   生成云图的字体文件

str.txt   爬取的电影短评

stop_words.txt  分词排除的词

cut_str.txt   jieba分词后文件

yun.png  最后生成的云图

代码如下:

spider_main.py  爬虫入口

#coding:utf-8import url_manager,html_parser,html_outputer,html_downloader,word_cloudclass SpiderMain(object):def __init__(self):# URL管理器self.urls = url_manager.UrlManager()# 网页下载器self.downloader = html_downloader.HtmlDownloader()# 数据提取器self.parser = html_parser.HtmlParser()# 数据处理器self.outputer = html_outputer.HtmlOutputer()# 云图生成器self.cloud = word_cloud.Wordcloud()def craw(self, root_url):count =1# 爬虫入口URLself.urls.add_new_url(root_url)# 待爬取URLwait_url = self.urls.has_new_url()if wait_url is not None:while wait_url:try:# 获取一个待爬取URLnew_url = self.urls.get_new_url()print("carw %d : %s" % (count, new_url))# 爬取页面html_cont = self.downloader.download(new_url)# 数据提取new_url, new_datas = self.parser.parser(new_url, html_cont)# 添加新待爬取URLself.urls.add_new_url(new_url)# 数据加工处理self.outputer.collect_data(new_datas)# 爬虫循环控制if count == 10:breakcount = count + 1except:print("craw failed")# 数据加工输出self.outputer.process_data()#print("finish")# 分词self.outputer.cut_str()# 生成云图self.cloud.make()print("finish")if __name__ == "__main__":# 爬虫入口URLroot_url = "https://movie.douban.com/subject/26862829/comments?status=P"obj_spider = SpiderMain()# 启动爬虫obj_spider.craw(root_url)

url_manager.py   URL管理器

#coding:utf-8class UrlManager(object):def __init__(self):self.new_urls = set()self.old_urls = set()def add_new_url(self, url):if url is None:returnif url not in self.new_urls and url not in self.old_urls:self.new_urls.add(url)def add_new_urls(self, urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)def has_new_url(self):return len(self.new_urls) != 0def get_new_url(self):new_url = self.new_urls.pop()self.old_urls.add(new_url)return new_url

html_downloader.py   网页下载器

#coding:utf-8import urllib.requestclass HtmlDownloader(object):def download(self, url):if url is None:return Nonerequest = urllib.request.Request(url)request.add_header("user-agent", "Mozilla/5.0")response = urllib.request.urlopen(url)if response.getcode() != 200:return Nonereturn response.read()

html_parser.py   数据提取器

#coding:utf-8import http.cookiejar
from bs4 import BeautifulSoup
import re
import urllib.parseclass HtmlParser(object):def parser(self, page_url, content):if page_url is None or content is None:returnsoup = BeautifulSoup(content, "html.parser", from_encoding='utf-8')new_url = self._get_new_url(page_url, soup)new_datas = self._get_new_datas(page_url, soup)return new_url, new_datasdef _get_new_url(self, page_url, soup):new_url = soup.find('div', id="paginator").find('a', class_="next").get('href')new_full_url = urllib.parse.urljoin(page_url, new_url)return new_full_urldef _get_new_datas(self, page_url, soup):res_datas = set()contents = soup.find_all('div', class_="comment-item")for content in contents:res_datas.add(content.find('div', class_="comment").find('p').get_text())return res_datas

html_outputer.py    数据处理器

#coding:utf-8import pymysql
import jieba.analyseclass HtmlOutputer(object):def __init__(self):self.datas = []def collect_data(self, data):res_datas = set()if data is None:returnfor d in data:self.datas.append(d)def process_data(self):#print(len(self.datas))file_object = open('./extra_dict/str.txt', 'w',encoding='utf-8',errors='ignore')data_str = ''for data in self.datas:#data_str += datafile_object.write(data)#print(data_str)file_object.close()def cut_str(self):content = open('./extra_dict/str.txt',encoding='utf-8',errors='ignore').read()jieba.analyse.set_stop_words("./extra_dict/stop_words.txt")tags = jieba.analyse.extract_tags(content, topK=1000,withWeight=True)file_object = open('./extra_dict/cut_str.txt', 'w')    for v, n in tags:#权重是小数,为了凑整,乘了一万#print(v + '\t' + str(int(n * 10000)))data_str = v + '\t' + str(int(n * 10000)) + '\n'file_object.write(data_str)file_object.close()

word_cloud.py    云图生成器

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as pltfrom wordcloud import WordCloud, STOPWORDS, ImageColorGeneratorclass Wordcloud(object):def make(self):d = path.dirname(__file__)# Read the whole text.text = open(path.join(d, './extra_dict/cut_str.txt')).read()# read the mask / color image taken fromalice_coloring = np.array(Image.open(path.join(d, "./extra_dict/li.png")))stopwords = set(STOPWORDS)stopwords.add("said")wc = WordCloud(font_path="./extra_dict/simhei.ttf",background_color="white", max_words=2000, mask=alice_coloring,stopwords=stopwords, max_font_size=40, random_state=42)# generate word cloudwc.generate(text)# create coloring from imageimage_colors = ImageColorGenerator(alice_coloring)# showplt.imshow(wc, interpolation="bilinear")plt.axis("off")plt.figure()# recolor wordcloud and show# we could also give color_func=image_colors directly in the constructorplt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")plt.axis("off")plt.figure()plt.imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")plt.axis("off")wc.to_file(path.join(d, "./extra_dict/yun.png"))plt.show()

python爬虫,爬取豆瓣电影《芳华》电影短评,分词生成云图。相关推荐

  1. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  2. python爬虫爬取豆瓣电影排行榜并通过pandas保存到Excel文件当中

    我们的需求是利用python爬虫爬取豆瓣电影排行榜数据,并将数据通过pandas保存到Excel文件当中(步骤详细) 我们用到的第三方库如下所示: import requests import pan ...

  3. Python爬虫爬取豆瓣电影评论内容,评论时间和评论人

    Python爬虫爬取豆瓣电影评论内容,评论时间和评论人 我们可以看到影评比较长,需要展开才能完整显示.但是在网页源码中是没有显示完整影评的.所以我们考虑到这部分应该是异步加载的方式显示.所以打开网页的 ...

  4. python爬虫爬取豆瓣读书Top250

    python爬虫爬取豆瓣读书Top250 话不多说,直接上代码! from urllib.request import urlopen, Request from bs4 import Beautif ...

  5. python爬虫爬取豆瓣top250电影影评

    信息系统课程项目,小组准备做一个电影推荐系统,自己选了觉得很有趣的资源模块,需要获取电影的评价资源等信息.花了大约一周看Web Scraping with Python这本书,对爬虫有了大体但是初略的 ...

  6. Python爬虫爬取豆瓣电影Top250

    爬虫爬取豆瓣Top250 文章目录 爬虫爬取豆瓣Top250 完整代码 第一步获取整个网页并以html来解析 正则表达式来匹配关键词 所有信息写入列表中 存入Excel中 效果如图 本文学习自B站UP ...

  7. python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  8. 用Python爬虫爬取豆瓣电影、读书Top250并排序

    更新:已更新豆瓣电影Top250的脚本及网站 概述 经常用豆瓣读书的童鞋应该知道,豆瓣Top250用的是综合排序,除用户评分之外还考虑了很多比如是否畅销.点击量等等,这也就导致了一些近年来评分不高的畅 ...

  9. python爬虫爬取豆瓣电影信息城市_python爬虫,爬取豆瓣电影信息

    hhhhh开心,搞了一整天,查了不少python基础资料,终于完成了第一个最简单的爬虫:爬取了豆瓣top250电影的名字.评分.评分人数以及短评. 代码实现如下:#第一个最简单的爬虫 #爬取了豆瓣to ...

  10. python爬虫——爬取豆瓣TOP250电影

    相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价.豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是TOP250的电影还是不错的,值得一看. 爬取目标 本文将爬取豆瓣 ...

最新文章

  1. 如何在linux下安装mysql5.7?
  2. 如何在一天内被Google和百度收录
  3. android sharedpre,Android SharedPreferences四种操作模式使用详解_Android_脚本之家
  4. 自动利用webshell执行系统命令py脚本
  5. linux屏保配置文件夹,Linux下屏保设置
  6. 怎么在windows上启动python_Windows下如何安装和运行Python
  7. 基于 .Net5.0 的快速开发框架,YuebonCore1.0.3 版已发布
  8. java(17) - 增强for循环、装箱拆箱、可变参数
  9. 软著【设计说明书】(软件著作权)
  10. 益智棋类游戏--走四棋儿
  11. 关于电的计算机公式,关于各类电量的计算公式
  12. 【笔记篇】01初识供应链——之《实战供应链》
  13. 句子迷,语录,苏引华
  14. android 开发 安卓系统主题设置
  15. php session fixation,聊聊session fixation attacks
  16. CentOS7-命令-查看路由信息(ip route)
  17. 资源宝分享wordpress主题后门检测清理技巧
  18. ST_TileEnvelope函数矢量切片
  19. 【大数据竞赛】2022MathorCup大数据挑战赛 B题 北京移动用户体验影响因素研究 题目分析
  20. 企业人的职场晋升“密码”

热门文章

  1. ros订阅话题python_ROS之话题的发布与订阅
  2. 手机的发展史,手机未来的发展趋势
  3. 计算机本地连接没有有效ip配置,本地连接没有有效的ip配置?教您怎么解决
  4. Java基本类型介绍
  5. 直线电机对比直线模组有哪些优点
  6. 【canvas绘制图形】
  7. zigbee通讯技术复习笔记
  8. C++课程基础语法小结
  9. SEO培训: 《搜索引擎优化知识完全手册》
  10. Linux系统忘记密码解决办法