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

python爬取上市公司套期保值公告(巨潮网)--使用Selenium方法,第1张

概述python爬虫爬取上市公司套期保值公告(巨潮网)摘要巨潮资讯网的网页是通过JavaScript动态加载的,因此本文利用Selenium方法爬取该网站上市公司的套期保值公告。主要技术路线:1.css_selector/xpath法模拟浏览器/无界面模拟浏览器2.自动翻页获取源代码3.正则提取4.数据清 Python爬虫爬取上市公司套期保值公告(巨潮网)

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

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

一、模拟浏览器 *** 作

@H_301_11@xpath法模拟浏览器**

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


代码如下

from selenium import webdriver   #引用selenium库里的webdriver功能browser = webdriver.@R_403_5567@()     #模拟谷歌的浏览器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
@R_403_5567@_options = webdriver.@R_403_5567@Options()
@R_403_5567@_options.add_argument(’–headless’)
browser = webdriver.@R_403_5567@(options=@R_403_5567@_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_source p_count = '</div> <span  >共 (.*?) 条 当前显示.*?条</span></div>' count = re.findall(p_count, data)[0]   # 获取总条数  class ="total-Box"  > 共 50条 当前显示1-10条 < / span > pages = int(int(count) / 10)  # 获取总页数 if pages>100:    pages=100 else:    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_source        datas.append(data)        time.sleep(2)    alldata = "".join(datas)  # 将列表转换为字符串    # browser.quit()
3.正则提取
 # 3.正则提取    p_Title = '<a target="_blank".*?>(.*?)</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 webdriverimport timeimport redef tao_bao(keyword):    # 1.无界面浏览    # @R_403_5567@_options = webdriver.@R_403_5567@Options()    # @R_403_5567@_options.add_argument('--headless')    # browser = webdriver.@R_403_5567@(options=@R_403_5567@_options)    browser = webdriver.@R_403_5567@()  # 模拟谷歌浏览器    browser.maximize_window()  # 最大化页面    url='http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=' + keyword    browser.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_source    p_count = '</div> <span  >共 (.*?) 条 当前显示.*?条</span></div>'    count = re.findall(p_count, data)[0]   # 获取总条数  class ="total-Box"  > 共 23 条 当前显示21-23条 < / span >    pages = int(int(count) / 10)  # 获取总页数    if pages>100:        pages=100    else:        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_source        datas.append(data)        time.sleep(2)    alldata = "".join(datas)  # 将列表转换为字符串    # browser.quit()    # 2.正则提取    p_Title = '<a target="_blank".*?>(.*?)</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方法全部内容,希望文章能够帮你解决python爬取上市公司套期保值公告(巨潮网)--使用Selenium方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1189098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存