由于期末课程作业的数据需要用到投资网站的评论,所以就准备从雪球网上爬取了。话不多说,下面就进入正题。

思路分析

首先登入雪球网,输入自己的关键词查找相关评论。


然后通过F12或者右键-检查进入控制台。

再点击网络查找我们需要的内容封装在哪里。第一次点击时会发现只有如下所示的空白页面,只需要再刷新一下就可以了。

之后发现我们需要的评论内容封装在左侧所示的json文件中,预览以后可见每一条评论都以字典的方式存储,当页的(每页有十条,通过“size:10”可知)所有都评论存在list列表中。

展开每一条评论即可查看网页提供的具体内容,大家可以按照自己所需要的提取相关内容(这次我需要获取每条评论的时间(timeBefore)和具体内容的链接(target),需要通过访问这个链接获取评论文章的具体内容)

下面就是通过我们获取到的链接访问的具体内容页面,同样进入控制台,可以看到内容在article_bd_detail标签中。我们将通过 BeautifulSoup和正则表达式进行网页清洗。

前情提要就到这了,下面上代码。

代码部分

1、用于下载网页的代码:

import pandas as pd
from bs4 import BeautifulSoup
import re
import requests
import jsondef download_page(url,para = None):#声明的用来下载网页的方法headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59'}if para:response = requests.get(url,params=para,headers = headers)else:response = requests.get(url,headers = headers)  response.encoding = response.apparent_encodingif response.status_code == 200:return response.textelse:print ("failed to download the page")

2、用于获取雪球网评论内容的关键代码:(可以自己选择一次性爬多少。) OS:主要是我怕我的电脑遭不住一次性爬完所有评论,才加了这个功能。各位读者要是觉得太麻烦,可以自己改改,不要这个功能的。

def xueqiu(Start,End):   #两个参数分别表示开始读取与结束读取的网页页码comments_list = []  #将响应头的参数补齐以避免无法读取的情况headers = {"Refer":"https://xueqiu.com/k?q=%E9%99%90%E5%94%AE%E8%82%A1%E8%A7%A3%E7%A6%81","Host": "xueqiu.com","Cookie":"acw_tc=2760820216245210669791692ead10af083a4c98f7b2541837fa80a96e6849; xq_a_token=f257b9741beeb7f05f6296e58041e56c810c8ef8; xqat=f257b9741beeb7f05f6296e58041e56c810c8ef8; xq_r_token=2e05f6c50e316248a8a08ab6a47bc781da7fddfb; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTYyNjQwMzgwNSwiY3RtIjoxNjI0NTIxMDUxMDg4LCJjaWQiOiJkOWQwbjRBWnVwIn0.YuyB7t3x8jCpO5aenapczHmoXzYznlC9XUntALPpBV8pBEZIBi1LU8oltfyvxRMerCY3VqsBR8moa64fSvxzArV0RMuL7633bjcB-b0GrQY3tvsva0Nlfj7w3tRTavMfw04fU_LruFbHhoc-LR-D83lH7e_Ndp4ZmwIayI3SEARBHqDWa4RjZ-KAxLiQ-hnS8usiodS8cxyTrmNtcr0hLB59zPCRq2KzO3RCVFuYmaNIRyWXXqcmjFS3tvpQ4FlOLC4YVOzqlb-vyhWJAAuQTXj7-z6XnQcRHRNQw53WRmiivgzv3YVPqIq0qQslJjIczAmmTeZxqYEy3ZMan3Bwow; u=441624521066981; Hm_lvt_1db88642e346389874251b5a1eded6e3=1624521071; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1624521079; device_id=24700f9f1986800ab4fcc880530dd0ed",'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'}#遍历每一个URLfor i in range(int(Start),int(End)+1):url='https://xueqiu.com/query/v1/search/status.json?sortId=3&q=%E9%99%90%E5%94%AE%E8%82%A1%E8%A7%A3%E7%A6%81&count=10''&page='+ str(i)# print(url)    用于检查response = requests.get(url, headers=headers, verify=False, timeout=30)   # 禁止重定向content = response.text#读取的是json文件。因此就用json打开啦result = json.loads(content)  #找到原始页面中数据所在地comments = result['list']                for i in range (0,len(comments)):            comment={}            #取出需要的字段并存入字典中comment['time']=comments[i]['timeBefore']            comment['target']=comments[i]['target']  #从初始页面获取内容的链接(不全,需要自行补齐),直接调用自己的方法(方法在第3步)读取文本内容comment['text'] = get_text("https://xueqiu.com"+comments[i]['target'])comments_list.append(comment)               return comments_list

3、用来通过链接获取具体内容的代码(包括数据清洗):

def get_text(url):       soup=BeautifulSoup(download_page(url))pattern = re.compile("article__bd__detail.*?")#按标签寻找all_comments = soup.find_all("div",{'class':pattern})text1=all_comments[0]con=text1.get_text()#只提取文字   return con

4、将提取的内容存在comments_data.csv文件中:

def output_csv(datalist):print(type(datalist),len(datalist))  # <class 'list'> 100用于检查import csvcsv_file = open("comments_data.csv", 'a+', newline='', encoding='utf-8-sig')  # 解决中文乱码问题。a+表示向csv文件追加writer = csv.writer(csv_file)writer.writerow(['Date', 'URL', 'Content'])for data in datalist:writer.writerow([data['time'], "https://xueqiu.com"+data['target'],data['text'],])#原来的链接不全因此给他补齐csv_file.close()

完整的代码

import pandas as pd
from bs4 import BeautifulSoup
import re
import requests
import jsondef download_page(url,para = None):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59'}if para:response = requests.get(url,params=para,headers = headers)else:response = requests.get(url,headers = headers)  response.encoding = response.apparent_encodingif response.status_code == 200:return response.textelse:print ("failed to download the page") def xueqiu(Start,End):   #两个参数分别表示开始读取与结束读取的页码comments_list = []  #将响应头的参数补齐以避免无法读取的情况headers = {"Refer":"https://xueqiu.com/k?q=%E9%99%90%E5%94%AE%E8%82%A1%E8%A7%A3%E7%A6%81","Host": "xueqiu.com","Cookie":"acw_tc=2760820216245210669791692ead10af083a4c98f7b2541837fa80a96e6849; xq_a_token=f257b9741beeb7f05f6296e58041e56c810c8ef8; xqat=f257b9741beeb7f05f6296e58041e56c810c8ef8; xq_r_token=2e05f6c50e316248a8a08ab6a47bc781da7fddfb; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTYyNjQwMzgwNSwiY3RtIjoxNjI0NTIxMDUxMDg4LCJjaWQiOiJkOWQwbjRBWnVwIn0.YuyB7t3x8jCpO5aenapczHmoXzYznlC9XUntALPpBV8pBEZIBi1LU8oltfyvxRMerCY3VqsBR8moa64fSvxzArV0RMuL7633bjcB-b0GrQY3tvsva0Nlfj7w3tRTavMfw04fU_LruFbHhoc-LR-D83lH7e_Ndp4ZmwIayI3SEARBHqDWa4RjZ-KAxLiQ-hnS8usiodS8cxyTrmNtcr0hLB59zPCRq2KzO3RCVFuYmaNIRyWXXqcmjFS3tvpQ4FlOLC4YVOzqlb-vyhWJAAuQTXj7-z6XnQcRHRNQw53WRmiivgzv3YVPqIq0qQslJjIczAmmTeZxqYEy3ZMan3Bwow; u=441624521066981; Hm_lvt_1db88642e346389874251b5a1eded6e3=1624521071; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1624521079; device_id=24700f9f1986800ab4fcc880530dd0ed",'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'}#遍历每一个URLfor i in range(int(Start),int(End)+1):url='https://xueqiu.com/query/v1/search/status.json?sortId=3&q=%E9%99%90%E5%94%AE%E8%82%A1%E8%A7%A3%E7%A6%81&count=10''&page='+ str(i)# print(url)    用于检查response = requests.get(url, headers=headers, verify=False, timeout=30)   # 禁止重定向content = response.text#读取的是json文件。因此就用json打开啦result = json.loads(content)  #找到原始页面中数据所在地comments = result['list']                for i in range (0,len(comments)):            comment={}            #取出需要的字段并存入字典中comment['time']=comments[i]['timeBefore']            comment['target']=comments[i]['target']  #从初始页面获取内容的链接(不全,需要自行补齐),直接调用自己的方法读取文本内容comment['text'] = get_text("https://xueqiu.com"+comments[i]['target'])comments_list.append(comment)               return comments_listdef get_text(url):       soup=BeautifulSoup(download_page(url))pattern = re.compile("article__bd__detail.*?")#按标签寻找all_comments = soup.find_all("div",{'class':pattern})text1=all_comments[0]con=text1.get_text()#只提取文字   return condef output_csv(datalist):print(type(datalist),len(datalist))  # <class 'list'> 100用于检查import csvcsv_file = open("comments_data.csv", 'a+', newline='', encoding='utf-8-sig')  # 解决中文乱码问题。a+表示向csv文件追加writer = csv.writer(csv_file)writer.writerow(['Date', 'URL', 'Content'])for data in datalist:writer.writerow([data['time'], "https://xueqiu.com"+data['target'],data['text'],])#原来的链接不全因此给他补齐csv_file.close()if __name__=="__main__":Start = input('请输入开始爬取的页数:') End = input('请输入结束爬取的页数:')result = xueqiu(Start,End)output_csv(result)

以上就是整个分析流程与代码,希望这个分享对大家有所帮助。

题外话:这是第一次写博客,措辞排版的还请各位多多包涵;本人也是在学习阶段,记录这些东西更多的是想交流分享,若有不严谨之处,希望各位多多提建议啦~

Python爬虫 获取雪球网股票讨论内容( 获取json文件的内容)相关推荐

  1. 手把手教你利用 python 爬虫分析基金、股票

    手把手教你利用 python 爬虫分析基金.股票 文章目录 手把手教你利用 python 爬虫分析基金.股票 第一步:基金数据爬取 第二步:股票增持计算 第三步:好股基金选取 桌面程序 exe 从前大 ...

  2. 从命令行获取两个路径名称并找出文件一样内容一样的两个文件

    import os import sys import subprocess import hashlibdir1 = sys.argv[1] dir2 = sys.argv[2]class File ...

  3. Python常用小技巧(五)——批量读取json文件

    Python常用小技巧(五)--批量读取json文件 前言:其实Python能够批量读取很多文件,这里,本人以json文件为例(json是标注图片时生成的文件,记录有标注的坐标和标签,友情推荐标注图片 ...

  4. python批量修改labelme(COCO)标注的json文件的label标签名称

    python批量修改labelme(COCO)标注的json文件的label标签名称 在深度学习的实践中,使用labelme标注软件标注好数据集之后,如果标签的名称标注错误或者需要修改,庞大的数据量依 ...

  5. 【一分钟解决】python实现多个“字典”之间无分隔符的JSON文件转CSV

    本文内容为原创,转载请说明出处 文章目录 一.json解析失败报错:json.decoder.JSONDecodeError 二.解决思路:先转化成常见的json格式 三.临床疾病问诊的实际问题 任务 ...

  6. python在财务中的应用实训报告-实践应用|PyQt5制作雪球网股票数据爬虫工具

    importrequests fromfake_useragentimportUserAgent url= 'https://xueqiu.com' session= requests. Sessio ...

  7. 实践应用|PyQt5制作雪球网股票数据爬虫工具

    点击上方"菜鸟学Python",选择"星标"公众号 超级无敌干货第一时间推给你!!! 最近有盆友需要帮忙写个爬虫脚本,爬取雪球网一些上市公司的财务数据.盆友希望 ...

  8. ajax 代码 查询股票联想,互联网金融爬虫怎么写-第三课 雪球网股票爬虫(ajax分析)...

    大家好啊,话说好久没有出来活动了,组织上安排写代码写了很久,终于又被放出来写教程了,感谢大家一直的支持和厚爱,我会一如既往的帮助大家完成爬虫工程师从入门到放弃的升华. 好,Previous on  系 ...

  9. 互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)

    系列教程: 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门) 上一节课我们一起通过一个p2p网贷爬虫,深入了解了一下XPath以及其在最终实际使用中的写法.可以毫不夸张的说,对于写简单爬 ...

  10. 互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门) 1

    系列教程: 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门) 上一节课我们一起通过一个p2p网贷爬虫,深入了解了一下XPath以及其在最终实际使用中的写法.可以毫不夸张的说,对于写简单爬 ...

最新文章

  1. 阿里、腾讯基本薪资曝光,资深算法工程师24万美元,高级研究员26万美元
  2. python filter内置函数_python 内置函数filter
  3. 解读GAN及其 2016 年度进展
  4. git 提示 error setting certificate verify locations !解决
  5. tomcat Server.xml Context配置
  6. linux 卸载skype,如何将Skype与Ubuntu Unity集成 | MOS86
  7. 广度优先搜索(BFS)——马的遍历(洛谷 P1443)
  8. java单元测试模拟输入_java – 单元测试:在定义模拟行为后调用...
  9. SqlServer2008R2软件下载安装教程
  10. 比较好的python培训视频
  11. linux重置ilo,重启HPE管理芯片ILO5的5种方法(Reset ilo)
  12. Android中自定义注解处理器
  13. css中textarea去掉边框和取消选中后的边框
  14. 2020~2021年杂记之
  15. 45特征03——最小多项式的概念和性质、广义特征子空间分解
  16. 读心术程序c语言流程图,无聊的时候写的读心术小程序
  17. 大数据技术用哪些语言?
  18. pdf文档补丁,pdf编辑,去除pdf文件限制
  19. 全球与中国植物培养箱市场现状及未来发展趋势(2022)
  20. M1 Dock智能硬件环境搭建(MaixPy安装及使用)

热门文章

  1. 微软也招 Java!
  2. 【数据维护】Windows文件保护机制(SFC)
  3. Informatica优化 - DTM Buffer Size
  4. 【无标题】互联网广告投放优势和前景
  5. python批量处理图片统一尺寸
  6. 在ArcGIS中自定义符号制作时,发现无法正常使用符号单位,是怎么回事?
  7. 顶尖、顶级、权威期刊目录
  8. 为 iPhone 制作 30s 以上的铃声
  9. 刚入职蚂蚁金服!应届生拿到年薪30w,这份Java面经分享给你!
  10. CPU、核心数、线程数、运行内存、超线程理解