python爬虫爬取上市公司套期保值公告(巨潮网)

摘要
巨潮资讯网的网页是通过JavaScript动态加载的,因此本文利用Selenium方法爬取该网站上市公司的套期保值公告。

主要技术路线:
1.css_selector/xpath法模拟浏览器/无界面模拟浏览器
2. 自动翻页获取源代码
3. 正则提取
4. 数据清洗
5. 保存到excel文件

一、模拟浏览器操作

xpath法模拟浏览器**

  1. fn+f12快捷键获取巨潮网网页源码
  2. 源码界面点击左上角箭头,再选中搜索框,获取搜索框对应源码位置
  3. 对应源码>鼠标右键>copy>copy xpath获取路径


代码如下

from selenium import webdriver   #引用selenium库里的webdriver功能
browser = webdriver.Chrome()     #模拟谷歌的浏览器
browser.get("https://www.baidu.com/")  # 通过browser.get()函数访问网址
browser.find_element_by_xpath('//*[@id="kw"]').clear() #若搜索框有默认内容则清空默认文字
browser.find_element_by_xpath('//*[@id="kw"]').send_keys('python') #自动在搜索框输入内容
browser.find_element_by_xpath('//*[@id="su"]').click() # 点击百度一下按钮

除了使用xpath法模拟浏览器外,还可用css_selector法模拟浏览器

ps:由于爬取数量太大,Selenium方法爬取数据仅模拟人工操作完成,这样会不断重复跳出新页面,效率极大的降低了。如果追求效率可使用无界面模拟浏览器,它可以关闭浏览器和后台进程,不仅可以提高获取数据速度,也可以提高电脑的运行效率。代码如下:

“”"
无界面模拟浏览器
“”"
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(’–headless’)
browser = webdriver.Chrome(options=chrome_options)
browser.get(‘https://www.baidu.cn’)
data = browser.page_source
print(data)

2.自动翻页获取源代码

由于巨潮网是动态网址,点击第2页、第3页等进行翻页的时候,网页地址栏中的url也没变,因此本文采用selenium法模拟鼠标点击下一页实现自动翻页。

 browser.find_element_by_xpath('//*[@id="fulltext-search"]/div/div[1]/div[2]/div[4]/div[2]/div/button[2]/i').click()   # 点击下一页按钮

一直点击下一页到最后一页时需要停止点击,跳出循环,需计算出总页数
计算总页数:
例:源代码中有显示总条数:共 50 条 当前显示1-10条
总页数=总条数/每页条数=50/10=5

 data = browser.page_sourcep_count = '</div> <span class="total-box" style="">共 (.*?) 条 当前显示.*?条</span></div>'count = re.findall(p_count, data)[0]   # 获取总条数  class ="total-box" style="" > 共 50条 当前显示1-10条 < / span >pages = int(int(count) / 10)  # 获取总页数if pages>100:pages=100else:pages=pages# print(data)

算出总页数之后用一个for循环点击下一页即可实现自动翻页
代码如下:

# 2.自动翻页获取源代码datas=[]datas.append(data)for i in range(pages):browser.find_element_by_xpath('//*[@id="fulltext-search"]/div/div[1]/div[2]/div[4]/div[2]/div/button[2]/i').click()   # 点击下一页按钮time.sleep(2)data = browser.page_sourcedatas.append(data)time.sleep(2)alldata = "".join(datas)  # 将列表转换为字符串# browser.quit()

3.正则提取

 # 3.正则提取p_title = '<a target="_blank".*?class="r-title">(.*?)</span>'p_href = '<a target="_blank" href="(.*?)" data-id="'p_shares = '<a target="_blank".*?data-seccode="(.*?)" class='  # 提取股票代码p_date = '<a target="_blank" href=".*?;announcementTime=(.*?)" data-id="'  # 提取发布日期title = re.findall(p_title,alldata)href = re.findall(p_href,alldata)shares = re.findall(p_shares,alldata)date = re.findall(p_date,alldata)

4.数据清洗

 # 3.数据清洗for i in range(len(title)):title[i] = re.sub('<.*?>','',title[i])href[i] = 'https://www.cnifo.com.cn' + href[i]href[i] = re.sub('amp;','',href[i])# print(str(i+1) + '.' + shares[i] +'-'+ title[i] + '-' + date[i])# print(href[i])

5.保存到excel文件中

 # 5. 写进excel文件file1 = open('/Users/hsx/Desktop/爬虫/套期保值公告爬取.csv', 'a')  #file1.write(keyword + '公告completed' + '\n' + '\n')for i in range(len(title)):file1.write(str(i+1) + '/' + shares[i] +'/'+ title[i] + '/' + date[i] + href[i])file1.write('----------' + '\n')file1.close()# 6.函数定义及调用
keywords = ['套保','套期保值']
for i in keywords:tao_bao(i)

6.完整代码:

"""巨潮资讯网数据挖掘实战--获取套期保值公告:1.搜索多个关键字2.实现翻页功能3.正则提取4.数据清洗5.存储到excel
"""
from selenium import webdriver
import time
import redef tao_bao(keyword):# 1.无界面浏览# chrome_options = webdriver.ChromeOptions()# chrome_options.add_argument('--headless')# browser = webdriver.Chrome(options=chrome_options)browser = webdriver.Chrome()  # 模拟谷歌浏览器browser.maximize_window()  # 最大化页面url='http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=' + keywordbrowser.get(url)time.sleep(3)browser.find_element_by_xpath(' // *[ @ id = "calendar"] / div / span / div / div / input[1]').send_keys('2014-01-01')browser.find_element_by_xpath('// *[ @ id = "calendar"] / div / span / div / div / input[2]').send_keys('2020-01-01')browser.find_element_by_xpath('// *[ @ id = "calendar"] / button / i').click()  # 点击搜索time.sleep(2)# 计算总页数data = browser.page_sourcep_count = '</div> <span class="total-box" style="">共 (.*?) 条 当前显示.*?条</span></div>'count = re.findall(p_count, data)[0]   # 获取总条数  class ="total-box" style="" > 共 23 条 当前显示21-23条 < / span >pages = int(int(count) / 10)  # 获取总页数if pages>100:pages=100else:pages=pages# print(data)# 2.自动翻页获取源代码datas=[]datas.append(data)for i in range(pages):browser.find_element_by_xpath('//*[@id="fulltext-search"]/div/div[1]/div[2]/div[4]/div[2]/div/button[2]/i').click()   # 点击下一页按钮time.sleep(2)data = browser.page_sourcedatas.append(data)time.sleep(2)alldata = "".join(datas)  # 将列表转换为字符串# browser.quit()# 2.正则提取p_title = '<a target="_blank".*?class="r-title">(.*?)</span>'p_href = '<a target="_blank" href="(.*?)" data-id="'p_shares = '<a target="_blank".*?data-seccode="(.*?)" class='  # 提取股票代码p_date = '<a target="_blank" href=".*?;announcementTime=(.*?)" data-id="'  # 提取发布日期title = re.findall(p_title,alldata)href = re.findall(p_href,alldata)shares = re.findall(p_shares,alldata)date = re.findall(p_date,alldata)# print(title)# print(len(title))# print(href)# print(len(href))# print(shares)# print(len(shares))# print(date)# print(len(date))# 3.数据清洗for i in range(len(title)):title[i] = re.sub('<.*?>','',title[i])href[i] = 'https://www.cnifo.com.cn' + href[i]href[i] = re.sub('amp;','',href[i])# print(str(i+1) + '.' + shares[i] +'-'+ title[i] + '-' + date[i])# print(href[i])# 4. 写进excel文件file1 = open('/Users/hsx/Desktop/爬虫/套期保值公告爬取.csv', 'a')  #file1.write(keyword + '公告completed' + '\n' + '\n')for i in range(len(title)):file1.write(str(i+1) + '/' + shares[i] +'/'+ title[i] + '/' + date[i] + href[i])file1.write('----------' + '\n')file1.close()# 5.函数定义及调用
keywords = ['套保','套期保值']
for i in keywords:tao_bao(i)

python爬取上市公司套期保值公告(巨潮网)--使用Selenium方法相关推荐

  1. python爬取云顶之弈官网排名数据

    ​因为宿舍想搞个云顶之弈排名,我并没有找到腾讯官方查询战绩的网站,所以决定对云顶官网的排行榜下手,云顶官网的数据排行网页(下链接)对排名的显示是一个可以滑动的divbox https://lol.qq ...

  2. 利用Python爬取基于AES对称加密算法的网易云音乐用户评论数据

    本文利用Python2.7根据网易云音乐歌曲ID爬取了该歌曲的所有用户评论数据.以id是28875120的歌曲<小岁月太着急>为示例,通过Chrome的DevTools工具获取已加密评论数 ...

  3. python爬取游天下苏州短租网数据(bs4)

    网址:苏州短租房,苏州日租房,苏州短租公寓-游天下苏州短租站 导入库 from bs4 import BeautifulSoup import requests 请求网页 url = 'http:// ...

  4. 用Python爬取上市公司数据、分析数据

    前言 在很多网站上,都会以表格的形式展示数据,而我们获取这种数据只需通过十几行爬虫代码就可以搞定,轻松搞定网页爬虫,实现高效办公 知识点: 爬虫基本原理 requests的简单使用 pandas库 p ...

  5. python爬取推特的详细教程_使用Selenium Python进行网页抓取[Twitter+Instagram]

    我正在尝试根据地理位置在Instagram和Twitter上进行网络抓取. 我可以运行一个查询搜索,但我在重新加载网页到more和存储字段到数据帧方面遇到了挑战.在 我确实找到了一些没有API密钥的w ...

  6. python爬取谷歌学术参考文献的BibTex格式——基于selenium

    1.背景 进行Latex写作时,当引用文献,需要根据文章名,一个一个去谷歌学术搜索,找到BibTex,再复制进bib文件里,耗费大量时间和精力. 图1.传统方法引用参考文献 这样枯燥重复的工作完全可以 ...

  7. python财务报表分析-用Python爬取东方财富网上市公司财务报表

    ♚ 作者:苏克,零基础.转行python爬虫与数据分析 博客:https://www.makcyun.top 摘要: 现在很多网页都采取JavaScript进行动态渲染,其中包括Ajax技术.有的网页 ...

  8. 爬取上市公司财务数据

    python爬取上市公司财务数据 爬取入口 http://data.eastmoney.com/bbsj/201112/yjbb.html 使用selenium进行爬取的,本来参考其他博主的代码,但是 ...

  9. Python 爬取财务报表

    在本文中,我们将介绍如何使用Python编写一个简单的数据抓取器,用于爬取东方财富网上的各类财务报表数据.我们将利用requests和lxml库进行数据请求和解析,并将抓取到的数据保存到CSV文件中. ...

最新文章

  1. 我输给了一个 25 岁的男人
  2. [architecture]-arm exclusive机制介绍
  3. 知道Google map上面街景怎么来的吗?-相当强大
  4. SQLite多线程使用总结
  5. 行星齿轮设计_3D打印用于制造刚度平衡的行星架
  6. PDF打印机常见问题汇总
  7. presto 正则提取函数
  8. 无线信号的调制方式 OOK、ASK、FSK、GFSK
  9. 路由器与计算机的ip地址,路由器ip地址与mac地址绑定
  10. 电力系统建模与仿真, 地理接线图,配电图,电力系统组态与监控,电力调度,自动控制,VBScript脚本控制,JavaScript脚本控制, 潮流分析2018...
  11. 购物是女人的天堂,男人的地狱,不了解清楚万一以后被坑了,男人躲哪里后悔去,做这样一个web购物网站,买了货死活回不来,让双十一的女人们过过瘾
  12. 王家林Spark 课程,蘑菇云,IMF真相
  13. Fabric chaincode shim.ChaincodeStubInterface
  14. Google学术搜索镜像网站搜集
  15. Flask项目之手机端租房网站的实战开发(一)
  16. Excel 单元格 输入内容后 背景自动变色
  17. ucos-III前言
  18. 在Blender中使用代码控制人物模型的嘴部动作 - 嘴部张开
  19. 如何设置QTableWideget和行高和列宽
  20. android 标题被顶出去,解决安卓虚拟键盘把标题栏顶出屏幕外

热门文章

  1. 【STM32】独立看门狗程序
  2. 岭南学院python课程作业5-2
  3. 榆熙电商:带你了解一下拼多多先用后付的知识
  4. CSS基础:浅谈position
  5. SpringBoot2+MybatisPlus3入门手册v2修订版
  6. 大数据_07 【hadoop HDFS的shell命令操作】
  7. python适合在什么平台运行-Python 可以在多种平台运行,
  8. 去角质剂和磨砂膏行业调研报告 - 市场现状分析与发展前景预测
  9. matlab 数据显示位数,matlab数据位数格式设置
  10. 布置主卧室的八大风水要点