大数据爬虫

第一部分  研究对象及结果

1.1 股票及网站选取

本文选取了保利发展、碧桂园、富力地产、华润置地、金科股份、龙湖集团、绿地控股、融创中国、万科A、中海地产十只股票,对同花顺官网的股价信息和东方财富网资讯、股吧进行了爬取,并生成词云。

1.2​​​​​​​爬虫结果

图1.1同花顺股价爬取结果

图1.2东方财富网股吧爬取结果

图1.3东方财富网资讯爬取结果

图1.4生成词云

第二部分  程序演示

运用Python的request库,模拟浏览器请求,解析网站返回的响应。

2.1同花顺网站股价爬取

图2.1股价爬取(一)

图2.2股价爬取(二)

图2.3股价爬取(三)

图2.4股价爬取(四)

首先,安装用于网络请求、数据处理、格式化输出的库。

  1. requests as r: 用于发送HTTP请求。
  2. urlsplit: 从urllib.parse中导入,用于解析URL。
  3. json: 用于处理JSON数据。
  4. re: 用于正则表达式匹配。
  5. pprint: 用于打印数据结构。
  6. pandas as pd: 一个数据处理库。
  7. os: 用于与操作系统交互。
  8. sys: 提供对Python解释器的一些变量和函数的访问。
  9. tqdm: 一个快速、可扩展的Python进度条库。

其次,处理一个URL发送网络请求,从响应中提取数据。

先解析URL,构建一个新的字符串,从而构建正则表达式模式。然后发送一个网络请求,获取响应内容,并使用正则表达式来匹配并提取所需的信息。

由于部分网站设有反爬机制,需要根据网站相关信息进行伪装,所以本文用HEADERS模拟浏览器行为的头部。若只保留"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",则会显示因python发出请求而被网站禁止,故保留整段头部信息。

图2.5同花顺HEADERS

       具体来看,HTTP请求头部 (HEADERS)是一个字典,包含了在发送HTTP请求时可能会用到的头部信息。这些头部信息用于模拟浏览器的行为,及遵守某些网站的请求规则(robots协议)。

  1. "Dnt": "1": 表示“Do Not Track”,用于告诉网站不要追踪用户的浏览行为。
  2. "Referer": 表示请求的来源URL。
  3. "Sec-Ch-Ua"、"Sec-Ch-Ua-Mobile"、"Sec-Ch-Ua-Platform": 这些头部与浏览器的用户代理字符串相关,用于描述发起请求的浏览器类型、版本和平台。
  4. "User-Agent": 标准的HTTP头部,用于标识发出请求的浏览器或其他客户端的类型和版本。

url_hs 和 url_hk是两个字符串模板,用于构建获取股票信息的URL。它们分别用于获取上海证券交易所(HS沪市)和香港证券交易所(HK港市)的股票信息。其中 {} 是一个占位符,可被替换为具体的股票代码。

以下是本文选取的十只股票

如果正则表达式匹配成功,它会进一步处理提取到的内容,比如将其转换为JSON格式并提取关键数据。如果匹配失败,则警告并退出程序。

接下来,从网站获取股票信息并将以CSV文件的形式保存到本地。

save_root 是一个字符串,定义了保存CSV文件的根目录名。使用 os.path.exists 检查该目录是否存在,如果不存在,则使用 os.mkdir 创建该目录

使用 tqdm 库提供的进度条来跟踪股票信息的获取进度。遍历 stock_id 字典,key 是股票名称,id_ 是股票代码。根据股票代码(是否包含 "HK")确定使用哪个URL模板来构建股票信息的URL。

使用 requests 库发送GET请求到 stock_url,并带上之前定义的HTTP请求头部 HEADERS。

检查响应的状态码是否成功。如果不是,警告并退出程序。

从响应中获取文本内容。对URL进行分割,并对其进行处理,生成后续正则表达式匹配所需的字符串。构建正则表达式模式,并在响应文本中搜索匹配的内容。

如果匹配成功,则获取括号内的内容;否则打印警告并退出程序。

将匹配到的内容解析为JSON格式。

检查 info_dict 字典的长度,并获取其唯一的键对应的值。

提取数据并处理,使用之前定义的 str2num 函数将字符串转换为数字。

将处理后的数据转换为Pandas DataFrame,并指定列名。

为DataFrame添加额外的列:日期和股票名字。

将DataFrame保存为CSV文件,文件名以股票名称命名,并保存到之前创建的目录中。

2.2东方财富网舆情及情绪爬取

            以资讯和股吧作为对象,按时间顺序提取日期、作者、标题、来源等信息。由于两者的爬取具有较高的相似性,故下文仅以资讯类为例进行解释说明。

图2.6资讯爬取(一)

图2.7资讯爬取(二)

图2.8资讯爬取(三)

图2.9资讯爬取(四)

首先,导入所需的库,定义示例URLHEADERS头部。

  • os: 用于与操作系统交互。
  • json: 用于处理JSON数据。
  • urllib.parse 和 from urllib.parse import urlsplit: 用于处理URL。
  • requests as r: 一个流行的HTTP库,用于发送网络请求。
  • re: 用于对返回的文本内容进行正则表达式匹配,提取所需信息。
  • pandas as pd: 一个数据处理和分析库。
  • sys: 提供对Python解释器使用或维护的一些变量的访问,以及与解释器强烈交互的功能。
  • from tqdm import tqdm: 用于显示数据提取或处理的进度

API变量存储了一个APIURL,这个URL用于搜索或获取某种数据。URL中的cb=param=是查询参数,其中cb通常用于JSONP回调,而param则用于传递搜索或请求的参数。

因该程序需要循环发送请求,要保留最简形式。通过对比发现,不同的股票的cb是变化的,删除后结果不变。故可写为以下形式:

temp_param_str定义一个经过URL编码的字符串。这个字符串是为了构建完整的API请求URL而准备的,它与API变量拼接,并通过requests库发送请求来获取数据。其具体展开如下:

其次,解码并转换为python可识别的形式。

解码temp_param_str中的URL编码字符,将其转换为原始字符串。再将解码后的字符串转换为Python字典

其中,JSONP是一种跨域解决方案,它允许网页从另一个域请求数据。JSONP通过在请求的URL中指定一个回调函数名,然后将返回的JSON数据作为该函数的参数来执行,从而实现了跨域。

接下来,对实例网址进行拆分、修改,合成新网址。发送新请求并保存结果。

定义保存资讯的根目录,如果该目录不存在则创建它。

为循环添加进度条,遍历字典中的股票名称。更新请求字典中的keyword为当前股票名称,并设置请求的页码。构建请求URL:将更新后的请求字典转换为JSON字符串,并去除其中的空格,然后对该字符串进行URL编码,最后将其附加到API基础URL上,形成完整的请求URL。

发送请求并处理响应: 使用requests库发送GET请求,并检查响应的状态码。

处理响应文本并保存数据为CSV文件:如果JSON字典中的msg字段值为'OK',则认为请求成功,并将结果添加到current_stock_result列表中。最后,将current_stock_result列表中的数据保存为以股票名称命名的CSV文件。

2.3词云生成

本部分参考自https://zhuanlan.zhihu.com/p/138356932

导入所需的库和模块:

  1. WordCloud, ImageColorGenerator, STOPWORDS:用于生成词云、颜色生成器以及定义停止词。
  2. jieba:一个中文分词库。
  3. Image:从PIL库中导入,用于图像处理。
  4. numpy as np:用于数值计算。
  5. pyplot as plt:用于绘图。

定义两个根目录路径。使用列表推导式生成两个文件夹中所有文件的路径列表

  1. 初始化一个空字符串 all_text,用于存储从CSV文件中提取的所有文本。
  2. 遍历 guab_list  zixun_list 中的所有文件路径。
  3. 对于每个文件,使用 pd.read_csv(file) 读取CSV文件到一个DataFrame对象 df
  4. 遍历 df  title 列,将每个标题添加到 all_text 字符串中,每个标题后面加上换行符 "\n"
  5. 遍历 df  content 列,将每个内容添加到 all_text 字符串中,每个内容后面也加上换行符 "\n"
  6. 最后,all_text 字符串将包含从所有CSV文件中提取的所有标题和内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值