爬取股票数据python

一给  金牌会员 | 2024-6-26 07:07:03 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 654|帖子 654|积分 1962

  1. 最近在搜集数据要做分析,一般的数据来源是一手数据(生产的)和二手数据(来自其他地方的)。
  2. 今天我们爬取同花顺这个网站的数据。url为:https://data.10jqka.com.cn/ipo/xgsgyzq/  
  3. 话不多说直接上代码。有帮助到各位的给**点赞评论收藏**。
复制代码
一 导入包

  1. import time
  2. import csv
  3. import requests
  4. from bs4 import BeautifulSoup
  5. import re
  6. import pandas as pd
复制代码
二 url+requests哀求

  1. url = 'https://data.10jqka.com.cn/ipo/xgsgyzq/'
  2. headers = {
  3.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
  4. response = requests.get(url, headers=headers)
  5. response.encoding = 'GBK' # utf-8
  6. main_string = response.text
复制代码
三 获取字段名称

  1. soup = BeautifulSoup(main_string, 'html') # html.parser
  2. # 正则表达式匹配<a>标签内的文本
  3. pattern = r'<a[^>]*>(.*?)</a>'
  4. matches = re.findall(pattern, str(soup.find_all('th')[0:18]), re.DOTALL)
  5. name_list = []
  6. for match in matches:
  7.     name_list.append(match)
  8. cleaned_list = [item.strip() if i == 0 else item for i, item in enumerate(name_list)]  # 有空字符 去掉
  9. print(cleaned_list)    ## 字段名称
复制代码
字段名称:
[‘股票代码’, ‘股票简称’, ‘申购代码’, ‘发行总数(万股)’, ‘网上发行(万股)’, ‘申购上限(万股)’,‘顶格申请需配市值(万元)’, ‘发行价格’, ‘发行市盈率’, ‘行业市盈率’, ‘申购日期’, ‘中签率(%)’, ‘中签号’, ‘中签缴款日期’, ‘上市日期’, ‘打新收益(元)’, ‘首日最高涨幅’, ‘连板天数’]
四 提取数据

  1. soup2 = BeautifulSoup(main_string, 'html')
  2. # 提取所有td标签内的内容以及span标签的target属性
  3. all_td_contents = [td.get_text(strip=True, separator=' ') for td in soup2.find_all('td')]
  4. all_target_values = [span.get('target') for span in soup2.find_all('span', class_='jumpToclient1')]
  5. data_list = []   ## 将数据添加到data_list里面  存在有问题的数据
  6. for content in all_td_contents:
  7.     data_list.append(content)
  8. print(data_list)
  9. ## 将有问题的数据处理保留干净的数据
  10. new_data = []
  11. # 遍历原始数据列表
  12. for item in data_list:
  13.     # 检查元素是否包含中签结果的关键词
  14.     if '网上定价发行摇号中签结果' in item:
  15.         parts = item.split(' ')
  16.         date_part = parts[0]
  17.         new_data.append(date_part)
  18.     else:
  19.         # 如果不是中签结果,则直接添加到新列表中
  20.         new_data.append(item)
  21. print(new_data)
复制代码
部分结果:
[‘603381’, ‘永臻股份’, ‘732381’, ‘5931.41’, ‘2135.3’, ‘2.10’, ‘21.00’, ‘-’, ‘-’, ‘17.20’, ‘06-17 周一’, ‘-’, ‘06-19’, ‘06-19’, ‘-’, ‘-’, ‘-’, ‘-’, ‘301580’, ‘爱迪特’, ‘301580’, ‘1902.9382’, ‘542.3’, ‘0.50’, ‘5.00’, ‘-’, ‘-’, ‘27.62’, ‘06-17 周一’, ‘-’, ‘06-19’, ‘06-19’, ‘-’, ‘-’, ‘-’, ‘-’]
五 建csv表以及将数据录入

  1. original_list = new_data
  2. ## 创建csv表
  3. fieldnames = ['股票代码', '股票简称', '申购代码', '发行总数(万股)', '网上发行(万股)', '申购上限(万股)','顶格申请需配市值(万元)', '发行价格', '发行市盈率', '行业市盈率', '申购日期', '中签率(%)', '中签号', '中签缴款日期', '上市日期', '打新收益(元)', '首日最高涨幅', '连板天数']
  4. filename = r'E:\工作\数据收集\数据\股票数据爬取\股票数据爬取.csv'
  5. with open(filename, 'w', newline='') as csvfile:
  6.     writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
  7.     writer.writeheader()     # 写入表头(字段名)
  8. print(f"CSV文件 {filename} 已创建并写入数据。")
  9. ## 写入数据
  10. with open(filename, 'a', newline='') as csvfile:
  11.     writer = csv.writer(csvfile)
  12.     # 使用列表推导式或循环来生成包含最多18个元素的子列表
  13.     for i in range(0, len(original_list), 18):
  14.         row = original_list[i:i + 18]  # 取列表中的18个元素
  15.         writer.writerow(row)  
复制代码
部分结果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表