03 爬虫实例-获取网页弹幕内容

练习:爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来

思路:

  1. 向哔哩哔哩网站发送请求
  2. 请求成功后,解析爬取的弹幕内容保存到一个文件中
  3. 读取文件并分析弹幕内容中词组或文字出现的频率
  4. 将这些词组或文字组成五角星图形
  5. 组成五角星图形后,以图片的形式输出

实现:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # author:albert time:2019/10/28
 4 import requests
 5 from bs4 import BeautifulSoup
 6 import pandas as  pd
 7 import re
 8 import jieba
 9 from wordcloud import WordCloud
10 from imageio import imread
11 import matplotlib.pyplot as plt
12
13 ‘‘‘
14 --获取网站弹幕列表内容
15 ‘‘‘
16 # 网页地址,该地址只针对哔哩哔哩弹幕网有效,获取方式查看
17 url = "http://comment.bilibili.com/124001121.xml"
18
19 # 网站访问的用户代理,建议携带,不携带可能无法访问
20 header = {
21     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
22 }
23
24 # 向对方服务器发送请求,返回访问状态,
25 # 返回状态如果是以[2]开头,表示访问成功,[4]开头表示网页不存在,[5]开头网站内部错误
26 # 访问状态无法直接读取,需通过属性[text]获取
27 response = requests.get(url,header)
28
29 # 获取网页的编码规则,建议通过该方式获取,而不是直接赋值,可能存在设置不对的情况,可能不是中文网页
30 # response.encoding = "utf-8"
31 response.encoding = response.apparent_encoding
32 # print(response.text)
33
34 # 获取网页文本内容
35 data = response.text
36 ‘‘‘
37 --将获取到的弹幕内容处理后存放在txt文件中,并读取出来
38 --网页获取的弹幕内容是带html标签的,需要将标签和非汉字的内容清除
39 ‘‘‘
40 # 解析文本xml,处理不规范标记并生成剖析树
41 soup = BeautifulSoup(data,‘lxml‘)
42 # print(soup)
43 # 获取所有<d>标签中的内容,此时是带标签的文本内容
44 d_list = soup.find_all(‘d‘)
45
46 # 去掉<d>标签,将文本内容存在在列表dlst
47 dlst = []
48 for d in d_list:
49     danmu = {}
50     danmu[‘弹幕‘] = d.text  # 循环获取所有<d>标签中内容
51     dlst.append(danmu)
52
53 df = pd.DataFrame(dlst) # 将列表dlst中的内容存放在数据集中,类似于Excel表格
54 # print(df)
55
56 # 创建并打开一个文件
57 f = open(‘cl.txt‘,‘w‘,encoding=‘utf-8‘)
58 # 进行文本过滤
59 for i in df[‘弹幕‘].values: # 遍历数据集中的所有的弹幕内容
60     pat = re.compile(r‘[一-龥+]‘)    # 定义过滤规则,只保留中文汉字,该正则表达式几乎包含了所有汉字龥(yu,第四声)
61     filter_data = re.findall(pattern=pat,string=i)     # 执行过滤操作
62     f.write(‘‘.join(filter_data))     # 将过滤后的弹幕内容写入创建的[cl.txt]文件中
63 f.close()
64
65 ‘‘‘
66 --读取弹幕内容所在的文件[cl.txt]
67 ‘‘‘
68 f1 = open(‘cl.txt‘,‘r‘,encoding=‘utf-8‘)
69 data = f1.read()
70
71 ‘‘‘
72 --将弹幕内容分割成词组,并组合成五角星的图案
73 ‘‘‘
74 result = " ".join(jieba.lcut(data))
75
76 f1.close()
77 color_mask = imread("五角星.jpg")         # 设置数据组合的图形,最好使用空心的图片
78 wc = WordCloud(
79     font_path="C:\Windows\Fonts\simsun.ttc",        # 数据显示的字体
80     width=1000,
81     height=800,
82     background_color=‘white‘,       # 词云的背景色
83     mask=color_mask         # 词云组成的图形,默认为二维
84 )
85
86 wc.generate(result)     # 将弹幕内容生成词云
87 wc.to_file(‘clanned.png‘)       # 词云输出文件
88
89 ‘‘‘
90 --显示弹幕内容组成的图片
91 ‘‘‘
92 plt.imshow(wc)
93 plt.show()

使用到的类库,如果没有,需要下载,下载命令:

pip install requests
pip install bs4
pip install pandas
pip install lxml        # 在解析xml文件时,需要使用
pip install jieba
pip install wordcloud
pip install imageio
pip install matplotlib

知识点:

  • request 向对方服务器发送请求
  • BeautifulSoup 解析爬取的弹幕内容
  • pandas 分析弹幕数据
  • jieba 中文分词器,或称为中文词组切片器
  • wordcloud 加载弹幕文本,并输出文件(这里使用图片的方式输出)
  • matplotlib.pyplot 将整理后的弹幕文本以图形的方式输出(这里是以五角星的图片为例)
  • imread 读取图片

问题:

  • 爬取的弹幕内容被保存在了文件后,后又重新读取,是否可以不存放在文件中,直接使用列表或者其他对象存储,然后再读取?保存在文件和直接读取的优缺点是什么?
  • 弹幕内容中除了汉字,实际上还包含了大量的字母,表情符号,这些内容可以通过什么正则表达式进行筛选,能否同时跟汉字一起筛选出来?
  • 在导包的时候,使用[from scipy.misc import imread]报错,用[from imageio import imread]代替即可。为什么使用scipy.misc中的imread报错?

原文地址:https://www.cnblogs.com/xiaodan1040/p/11755274.html

时间: 2024-10-28 00:29:09

03 爬虫实例-获取网页弹幕内容的相关文章

telnet建立http连接获取网页HTML内容

利用telnet可以与服务器建立http连接,获取网页,实现浏览器的功能. 它对于需要对http header进行观察和测试到时候非常方便.因为浏览器看不到http header. 步骤如下: telnet www.csua.berkeley.edu 80 输入GET /officers.html HTTP/1.0 并2次回车. 这时就应该可以看到http response了,包括了header和body. 因为window自己带到telnet在输入内容的时候看不到输入的内容,可以下载putty

[原创]利用爬虫技术获取网页数据,以及想要的指定数据

最近在公司做个系统,由于要获取网页的一些数据,以及一些网页的数据,所以就写的一个公用的HttpUtils.下面是针对乌云网我写的一个例子. 一.首先是获取指定路径下的网页内容. public static String httpGet(String urlStr, Map<String, String> params) throws Exception { StringBuilder sb = new StringBuilder(); if (null != params &&

java 获取网页指定内容

import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpTest { String urlString; public static void main(String[] args) throws Exception { HttpTest client = new HttpTes

scrapy爬虫获取网页特定内容

上次把scrapy环境配置好了,这次试着来做些实际的东西. 关于scrapy抓取网页的文章已经有很多了,但大多数的内容已经过期,不再适用于最新的scrapy版本,故在此另作一文,记录学习过程. 目标是一个政府网站,红框内的部分. 思路很简单: 有了url之后,用xpath表达式提取出来,再写到文件里即可 如果之前没有scrapy的经验,可以先看看这两篇文章: http://www.cnblogs.com/txw1958/archive/2012/07/16/scrapy-tutorial.htm

Python3爬虫04(其他例子,如处理获取网页的内容)

#!/usr/bin/env python# -*- coding:utf-8 -*- import osimport reimport requestsfrom bs4 import NavigableStringfrom bs4 import BeautifulSoup res=requests.get("https://www.qiushibaike.com/")qiushi=res.contentsoup=BeautifulSoup(qiushi,"html.pars

Python爬虫学习——获取网页

通过GET请求获取返回的网页,其中加入了User-agent信息,不然会抛出"HTTP Error 403: Forbidden"异常, 因为有些网站为了防止这种没有User-agent信息的访问,会验证请求信息中的UserAgent(它的信息包括硬件平台.系统软件.应用软件和用户个人偏好),如果UserAgent存在异常或者是不存在,那么这次请求将会被拒绝. #coding=utf-8 import urllib2 import re #使用Python2.7 def getHtml

php利用curl获取网页title内容

<?php $url = 'http://www.k7wan.com'; echo getTitle_web_curl($url); function getTitle_web_curl($url){ $title = ''; $ch = curl_init(); //设置选项,包括URL curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLO

C++ 与 php 的交互 之----- C++ 异步获取 网页文字内容,异步获取 php 的 echo 值。

转载请声明出处! http://www.cnblogs.com/linguanh/category/633252.html 距离上次 谈 C++ 制作json 或者其他数据传送给 服务器,时隔两个多月. 链接:http://www.cnblogs.com/linguanh/p/4340119.html 这次是从服务器上 中获取 文字内容到控制台,或者写入本地文本等操作,废话不多说,开讲. ------------------------------------------------------

C++ 与 php 的交互 之----- C++ 获取 网页文字内容,获取 php 的 echo 值。

转载请声明出处! http://www.cnblogs.com/linguanh/category/633252.html 距离上次 谈 C++ 制作json 或者其他数据传送给 服务器,时隔两个多月. 链接:http://www.cnblogs.com/linguanh/p/4340119.html 这次是从服务器上 中获取 文字内容到控制台,或者写入本地文本等操作,废话不多说,开讲. ------------------------------------------------------