python爬虫及其分析

此次代码为搜集微博评论以及对于评论内容进行评论情感分析和词云图绘制等功能。

搜集代码如下:

import urllib.parse
import urllib.request
import requests
from bs4 import BeautifulSoup
import pandas as pd

alldata = []

# 定义 URL 和请求头
keyword = '亚文化'

for page in range(1,50):
    url = f'https://s.weibo.com/weibo?q={urllib.parse.quote(keyword)}&Refer=user_weibo&page={page}'
    headers = {
        'referer': 'https://s.weibo.com/',
        'Cookie': 'SINAGLOBAL=3217528387671.389.1710902126918; ALF=1713494144; SUB=_2A25I_jvRDeRhGeFK71MW9CfNwjmIHXVocjEZrDV8PUJbkNAGLVX9kW1NQ0r1inHgjEyADZa5ngTxKjFc2w9WWV_G; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWjy3Toac90fFYhoRnbbfqP5JpX5KzhUgL.FoMXSh2NSh.p1K-2dJLoIE5LxKMLB.zL12qLxK-L12-L1hqLxKnLB.qL1hM0eh.ceBtt; _s_tentry=weibo.com; Apache=9125693823788.748.1710903100151; ULV=1710903100184:2:2:2:9125693823788.748.1710903100151:1710902126952',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'

    }

    # 构造请求对象并发送请求
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    comments = soup.find_all('div', {'class': 'content', 'node-type': 'like'})
    cards = soup.find_all('div', {'class': 'card-act'})

    for card, comment in zip(cards, comments):
        like_count = card.find('a', {'action-type': 'feed_list_like'}).find('span',
                                                                            {'class': 'woo-like-count'}).get_text()
        comment_count = card.find('a', {'action-type': 'feed_list_comment'}).get_text().strip()

        nickname = comment.find('a', class_='name')['nick-name']
        time = comment.find('div', class_='from').find('a').text
        scomment = comment.find('p', class_='txt').get_text(strip=True)
        like_count = 0 if like_count == '赞' else like_count
        comment_count = 0 if comment_count == '评论' else comment_count
        # 整合数据
        rowdata = [comment_count, like_count, nickname, time, scomment]
        alldata.append(rowdata)

dataframe = pd.DataFrame(data=alldata, columns=['评论数量', '点赞数量', '评论者昵称', '评论时间', '评论内容'])
dataframe.to_excel('亚文化.xlsx', index=False)

分析代码如下:

from collections import Counter
from snownlp import SnowNLP
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
# 读取Excel文件中的数据
data = pd.read_excel('亚文化.xlsx')
num_comments = len(data)
print("一共读取了", num_comments, "条评论")

# 进行情感分析
data['情感分析'] = data['评论内容'].apply(lambda x: SnowNLP(x).sentiments)

positive_comments = data[data['情感分析'] >= 0.55]


# 假设您的数据存储在名为data的DataFrame中
# 根据您的描述,'情感分析'列包含情感分析的值

# 进行筛选
z_comments = data[(0.45 < data['情感分析']) & (data['情感分析'] < 0.55)]
negative_comments = data[data['情感分析'] <= 0.45]

# 输出人们对评论是积极的还是消极的
print("积极评论数量:", len(positive_comments))
print("中立评论数量:",len(z_comments))
print("消极评论数量:", len(negative_comments))

# 合并所有评论内容
all_comments = ' '.join(data['评论内容'])

# 自定义词频字典,将想要突出显示的内容加入其中
custom_words = {
    "二次元": 3,
    "同性恋": 1,
    # Add more custom words with their frequencies
}

# 使用 replace 方法去除不需要的内容
filtered_comments = all_comments.replace('展开', '').replace('c', '').replace('俄罗斯','').replace('超话','').replace('微博视频','')

# 将处理后的字符串分割为单词,并计算词频
comment_counter = Counter(filtered_comments.split())

# 合并自定义词频字典和评论数据的词频统计
comment_counter.update(custom_words)

# 生成词云图
# 生成词云图
wordcloud = WordCloud(font_path='simhei.ttf', width=800, height=400, scale=2, max_font_size=150, max_words=100, background_color='white', collocations=False).generate_from_frequencies(comment_counter)
plt.figure(dpi=300)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
plt.figure(dpi=300)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

# 进行词频分析
words = jieba.lcut(all_comments)

# 去除特殊符号和空格
clean_words = [word.strip() for word in words if word.strip() and word != ' ' and word != '\u200b' and word != ',' and word != '。'and word != '的'and word != '和'and word != '#'and word != '是'and word != '在'and word != '我'and word != '人'and word != '展开'and word != '、']

# 统计词频
word_counts = Counter(clean_words)
top_words = word_counts.most_common(10)
print('词频分析结果:', top_words)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python爬虫完整项目分析代码及数据库,主要包括以下几个步骤。 1. 确定目标爬取数据源 首先需要确定要爬取哪些信息和来源网站。例如,要从某个电商网站爬取商品信息和价格等数据。 2. 抓取数据并进行数据清洗 使用Python爬虫库如Requests或Selenium等抓取相关数据。获取数据后,需要进行数据清洗。比如,需要从HTML代码中提取所需信息,去除多余标签和空白字符,转换数据类型等。 3. 存储数据到数据库 数据清洗之后,将数据存储到数据库中。可以使用Python的ORM库如SQLAlchemy或Django ORM等,将数据存储到关系型数据库中,如MySQL、PostgreSQL等。 4. 设计数据表结构 在存储数据前,需要设计数据库的表结构。具体需要考虑哪些信息需要存储、如何关联存储信息等。 5. 数据可视化与分析 将存储在数据库中的数据进行可视化处理,以便更好地理解和分析数据。Python的Matplotlib和Pandas等库可以实现数据的可视化。 总结来说,Python爬虫完整项目分析代码及数据库需要对数据来源确定、数据抓取、数据清洗、数据库设计和数据可视化进行全面分析,并通过Python的相关库进行全方位处理和操作。它可以提供更高效和有价值的数据支撑,有助于实现更好的商业价值。 ### 回答2: Python爬虫是一种非常有用的技术,可以帮助我们从互联网上收集大量的数据,并帮助我们分析这些数据。完整的Python爬虫项目包括代码和数据库。下面我们来分析一下如何实现一个完整的Python爬虫项目。 首先,我们需要写一个Python脚本来实现爬虫。在这个脚本中,我们需要使用Python中的Request库来发送请求,然后使用BeautifulSoup库来解析网页上的数据。当我们成功的获得了数据之后,我们可以将数据存储到一个数据库中,以便之后的使用。 对于数据库,我们可以选择使用关系型数据库,如MySQL或SQLite,或使用非关系型数据库,如MongoDB。在数据库中,我们可以为每个爬取的数据项创建一个表,在表中设置相应的字段来保存数据。还可以根据需要对数据进行索引,以便在需要时查找数据。 在爬虫过程中,我们需要确保不会将数据重复添加到数据库中。为此,我们可以在数据库中使用唯一键来标识每个数据项。另外,我们需要定期清理数据库,删除过时的数据,以保持数据库的性能。 在完整的Python爬虫项目中,我们还需要考虑如何处理数据。通常,我们需要使用Pandas库来处理数据,并使用Matplotlib或其他数据可视化库来分析数据。 总之,Python爬虫是一个非常强大的工具,可以帮助我们从互联网上收集、分析和处理大量的数据。一个完整的Python爬虫项目包括代码和数据库,我们需要仔细设计和实现它们,以确保我们可以有效地处理数据。 ### 回答3: Python爬虫是一种功能强大的网络爬虫技术,可以帮助用户从网络中获取任何所需的信息,并将其存储到数据库中。下面,我们来介绍一个完整的Python爬虫项目的代码和数据库。 代码部分: 我们可以用requests和BeautifulSoup库来实现Python爬虫。Requests是一个优秀的Python HTTP库,能够处理发出的请求以及接收响应,而BeautifulSoup则是一种处理HTML和XML文档的Python库,可以帮助用户提取需要的信息。 下面是代码的主要框架: import requests from bs4 import BeautifulSoup import sqlite3 #创建数据库连接 conn = sqlite3.connect("database.db") cursor = conn.cursor() #创建数据表 cursor.execute("CREATE TABLE IF NOT EXISTS course(name TEXT, teacher TEXT, time TEXT)") #遍历所有页面 for page in range(1,5): #发出请求 url = "http://www.example.com/page="+str(page) r = requests.get(url) #解析HTML代码 soup = BeautifulSoup(r.text, "html.parser") #提取信息 courses = soup.findall("div",{"class":"course"}) for course in courses: name = course.find("h3").text teacher = course.find("p",{"class":"teacher"}).text time = course.find("p",{"class":"time"}).text #插入到数据库中 cursor.execute("INSERT INTO course(name,teacher,time) VALUES(?,?,?)",(name,teacher,time)) conn.commit() #关闭数据库连接 cursor.close() conn.close() 数据库部分: 在这个项目中,我们所使用的数据库是SQLite3。SQLite3是一种轻型的关系型数据库管理系统,它具有嵌入式的特点,可以在各种操作系统中运行。 下面是数据库的结构: course表: --------------------- |name |teacher |time| --------------------- |Math |Tom |MWF | --------------------- |Science|John |TTH | --------------------- |English|Sarah |MWF | --------------------- 在这个表中,我们存储了每个课程的名称、教师和上课时间。每个字段都是文本类型。 在代码中,我们使用SQL语句来创建表格,并使用INSERT INTO语句将提取到的信息插入到表格中。 完整代码及数据库的使用可以根据个人需要进行修改,但总体框架应该是一致的。Python爬虫技术可以帮助我们自动化地获取网络上的数据,并将其存储到数据库中。这对于分析和处理大量的数据非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值