爬取股票吧评论

import re
import xlwt
from urllib import parse
from bs4 import BeautifulSoup
import requests
import random
from lxml import etree


# 从ip代理网站获取ip列表
def get_ip_list(url, headers):
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    ips = soup.find_all('tr')
    ip_list = []
    for i in range(1, len(ips)):
        ip_info = ips[i]
        tds = ip_info.find_all('td')
        ip_list.append(tds[1].text + ':' + tds[2].text)  # 拼接成【ip:端口】的格式
    return ip_list


# 在ip列表中随机取出一个ip
def get_random_ip(ip_list):
    proxy_list = []
    for ip in ip_list:
        proxy_list.append('https://' + ip)  # 拼接成网址
    proxy_ip = random.choice(proxy_list)  # 随机选择一个网址
    proxies = {'https': proxy_ip}  # proxies的格式是一个字典:{‘http’: ‘http://123.123.321.123:808‘}
    return proxies


def main():
    import time
    start_time = time.time()
    b = 0
    columns = ['网址', '作者', '发布时间', '标题', '内容', '阅读量', '评论数']
    workbook = xlwt.Workbook(encoding="utf-8")
    worksheet = workbook.add_sheet('My Worksheet')
    for k in range(len(columns)):
        worksheet.write(0, k, columns[k])
        workbook.save('movie.xls')
    a = int(input("请输入页数:"))
    for i in range(a):
        proxy_url = 'http://ip.yqie.com/proxygaoni/'  # ip代理网站
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1'}

        ip_list = get_ip_list(proxy_url, headers)  # 调用函数get_ip_list 传入参数url和headers,返回一个IP列表
        proxies = get_random_ip(ip_list)  # 调用函数get_random_ip 传入参数是第一个函数得到的列表,返回一个随机的proxies
        print(proxies)

        url = "http://guba.eastmoney.com/list,002506_{}.html".format(i)
        headers = {'Referer': "http://guba.eastmoney.com",
                   'User-Agent':
                       'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0)'
                       'Gecko/20100101 Firefox/80.0',
                   }
        response0 = requests.get(url=url, headers=headers, proxies=proxies)
        news_comment_urls0 = re.findall(r'/news,002506,\S+html', response0.text)
        html = etree.HTML(response0.text)  # 解析成html
        read_num = html.xpath(
            '//*[@id="articlelistnew"]/div/span[3]/a[contains(@href,"new")]/../../span[1]/text()')  # 阅读数
        comment_num = html.xpath(
            '//*[@id="articlelistnew"]/div/span[3]/a[contains(@href,"new")]/../../span[2]/text()')  # 评论数
        a = 0
        for comment_url0 in news_comment_urls0:
            worksheet.write(b + 1, 5, read_num[a])
            worksheet.write(b + 1, 6, comment_num[a])
            a+=1
            workbook.save('movie.xls')
            b += 1
            list_url = "http://guba.eastmoney.com"
            whole_url0 = parse.urljoin(list_url, comment_url0)
            print(whole_url0)
            worksheet.write(b, 0, whole_url0)
            workbook.save('movie.xls')
            response1 = requests.get(whole_url0)
            name = re.findall('<font>(.*?)</font>', response1.text)
            for nam in name:
                print(nam)
                worksheet.write(b, 1, name)
                workbook.save('movie.xls')
            tim = re.findall('<div class="zwfbtime">(.*?)</div>', response1.text)
            tim = str(tim)
            tim1 = re.findall('\d\d\d\d-\d\d-\d\d', tim)
            for second in tim1:
                print(second)
                worksheet.write(b, 2, second)
                workbook.save('movie.xls')
            title = re.findall('<title>(.*?)</title>', response1.text)
            title = str(title)
            title1 = re.findall(r".*'(.*)_协.*", title)
            for j in title1:
                print(j)
                worksheet.write(b, 3, j)
                workbook.save('movie.xls')
            content = re.findall('<div class="stockcodec .xeditor">(.*?)</div>', response1.text, re.DOTALL)
            for i in content:
                m = re.sub("[a-zA-Z<>_=.\":/]", '', i)
                print(m)
                worksheet.write(b, 4, m)
                workbook.save('movie.xls')
                print(read_num[a - 1])
                print(comment_num[a - 1])

    end_time = time.time()
    print(f"总共需要时间为: {end_time - start_time} s")
    print(b)


if __name__ == '__main__':
    main()

第三方库:snownlp、tushare、pandas、numpy、matplotlib getData:从东方财富网旗下的股吧论坛爬取数据 SQL:用到的数据库操作函数 quantilizeSentiment:量化情绪指数,生成excel文件便于后面进行情绪指数和股票价格涨幅相关度的量化分析(股票价格历史数据来自tusharepro网站,可以免费获取) result:传入某只股票代码,返回情绪指数结果(主要关注此文件即可,其他爬虫分析之类的我后面放到云上,爬取的数据都放入云数据库中) analyze:进行情绪指数和股票价格涨幅相关度分析、数据可视化 爬取后的数据存储在云端数据库中: db = pymysql.connect(host="116.62.46.214",user="dfcf",password="iJHPFZnRjXacNi6p",db="dfcf",port=3306) 接口说明(重点!!!): 函数: def data(share_code):#计算情绪指数 传参:share_code 股票代码(例如:zssh000001)上证指数 返回参数:result 情绪指数 例如: if __name__ == '__main__': result=data('zssh000001') #传入股票代码参数 print(result) #打印情绪指数结果 实现功能:根据传入的股票代码到东方财富网旗下的股吧对应的某股票分论坛爬取当天的用户评论信息,并将爬取的数据存储到MySQL中,之后再将数据进行统计并计算出该股票当天的市场情感趋势。 执行流程 1、输入股票代码 2、清空数据库上一天的评论信息 3、使用爬虫爬取当天东方财富网股吧论坛中该股票的股民评论信息并进行数据清洗过滤,筛选出有效信息,存入MySQL数据库 4、使用金融情感计算模型进行文本数据分析 5、得出该股票当日的情绪指数 6、返回情绪指数值 计算情绪指数具体算法实现 借助自然语言处理中的情感分类技术。按照正常的处理流程,需要搭建模型、准备语料库、训练模型、测试模型然后得到一个情感分类的模型。但这里,时间有限,所以直接使用现有的模型。snownlp是一个中文的开源的自然语言处理的Python库,可以进行分词、情感分类等。在本项目中可以直接使用它来量化出某一日市场投资者的整体情绪。量化的方法有许多种,可以将某一日所有的评论情绪得分得分相加再求评价,也可以求某一日情绪得分大于0.5的评论所占的比例。 项目所采用的方法: 将情绪得分>0.6的评论当作积极评论,小于0.4的评论当作消极评论。 设置变量neg和pos,存储某一日市场的积极情绪因子和消极情绪因子。关于neg和pos的计算方法,以neg为例: 初始化为0,若某一日的某一评论comment的情绪得分<0.4 neg=neg+1+log(该条评论的点赞数+该条评论作者的粉丝数+1,2),其中log(x,2)表示以2为低的x的对数。考虑该条评论的点赞数和该条评论作者的粉丝数是因为考虑到不同的评论的质量不同。取对数是为了让数据更加平滑,防止极值过大。+1是为了防止该条评论的点赞数和该条评论作者的粉丝数都为0。 计算某一日市场的总体情绪得分score。设计的模型是: score=log((pos/(pos+neg+0.0001)-0.5)*(该日评论总数+1)) (pos/(pos+neg+0.0001)-0.5)的意思是计算市场的情绪倾向,**大于0表明市场积极情绪情绪较强,越接近0.5越强。小于0反之。**后面的(该日评论总数+1),是因为某一日投资者的评论越多,代表市场投资者情绪的波动越大。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值