周浪的实验报告

代码


# -*- coding: utf-8 -*-
import web_crawling as wc
import find_assignment as fa
import download as dl
import tool
import read_data as rd
import draw_pics as dp

import pandas as pd
import numpy as np

if __name__ == "__main__":
    df_code = fa.find_assignment(tool.get_No(),10)
    code_list = df_code['code_list']
    name_list = df_code['name_list']
    for code in code_list:
        wc.get_table(code)
        print("股票" + code + " completed...")
    
    for code in code_list:
        dl.get_pdf_link(code)
        print("股票" + code + "的年报下载 completed...")

    tool.clean_pdf()
    
    data = rd.read_all_data(df_code)
    seperated_data = tool.seperate_df(df_code,data)
    
    np.save('seperated_data.npy',seperated_data)
    seperated_data = np.load('seperated_data.npy',allow_pickle = 'True').item()
    
    for key in seperated_data.keys():
        dp.draw_pics_twinx(seperated_data.get(key))


import fitz
import re
import pandas as pd

#判断行业中上市公司个数是否满足大于等于10的要求
def does_match(text):
    if len(re.findall('\n\d{6}\n',text)) < 10:
        return False
    else:
        return True


def find_assignment(No,num): 
    #No为int类型,表示在本次作业中该学生的序号
    #num代表该行业前num家上市公司
        
        #读取所有的内容
    text = ''
    with fitz.open('../1638277734844_11692.pdf') as doc:
        for page in doc:
            text = text + page.get_text('text')
        
    #找到所有行业的两位代码
    locs = re.finditer('\n\d{2}\n',text)
    
    #注意locs里面可能有重复的行业标号,需要筛选一下
    loc_dict = {}
    for loc in locs:
        #loc.span()的结果为左开右闭的区间,去除两端的换行符
        s = loc.span()[0] + 1
        e = loc.span()[1] - 1
        if text[s:e] in loc_dict:
            continue
        else:
            loc_dict[text[s:e]] = [s,e]
    
    #获取有效行业(上市公司>=10),将他们放入列表effective_industries中,

    last_key = '' #保存上一次循环中的key
    last_value = 0 #保存上一次循环中的value[1],即行业代码的索引的后一位置(为换行符)
    effective_industries = []
    for key,value in loc_dict.items():
        
        if key != '01':
            subtext = text[last_value:value[0]]
            if does_match(subtext) == False:
                last_key = key
                last_value = value[1]
                continue
            else:
                effective_industries.append(last_key)   
        #第一个的key必定是01,所以第一次循环直接跳到这一步
        last_key = key
        last_value = value[1]
        
    #注意,最后还剩下一部分没循环到
    subtext = text[last_value:len(text)]
    if does_match(subtext) == True:
        effective_industries.append(key)
    
    #判断No匹配哪个行业
    #可能会出现No超过了有效行业数,故采用模运算
    No = No % len(effective_industries)
    
    my_industry = effective_industries[No-1] 
    
    print('第'+ str(No) + '号的作业是行业 ' + my_industry)
    
    '''
    附加代码,找到自己的行业包含的所有公司代码,以列表返回
    '''

    s = loc_dict.get(my_industry)[1]
    
    #获得下一个键值对,如'01'之后为'02'
    if int(my_industry) < 9:
        nxt = '0' + str(int(my_industry) + 1)
    elif int(my_industry) == 9:
        nxt = '10'
    else:
        nxt = str(int(my_industry) + 1)
    e = loc_dict.get(nxt)[0]
    
    subtext = text[s:e]
    
    code_list = re.findall('\n\d{6}\n',subtext)
    code_list = [code.strip() for code in code_list]
    
    '''
    附加代码,找到自己的行业包含的所有公司名称,以列表返回
    '''
    name_list = []
    
    for code in code_list:
        code_first_loc = subtext.find(code)
        start = code_first_loc + 7
        end = subtext.find('\n', start)
        
        name = subtext[start : end]
        name_list.append(name)
    
    '''
    把公司代码code_list和公司名称name_list合并成dataframe
    '''
    df = {'code_list':code_list[0:num], 'name_list':name_list[0:num]}
    df = pd.DataFrame(df)
    
return df

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

import tool

def get_table_sse(code):#code here refers to stock code
    
    browser = webdriver.Chrome()
    url = 'http://www.sse.com.cn/disclosure/listedinfo/regular/'
    browser.get(url)
    time.sleep(3)
    browser.set_window_size(1550, 830)
    browser.find_element(By.ID, "inputCode").click()
    browser.find_element(By.ID, "inputCode").send_keys(code)
    time.sleep(3)
    browser.find_element(By.CSS_SELECTOR, ".sse_outerItem:nth-child(4) .filter-option-inner-inner").click()
    browser.find_element(By.LINK_TEXT, "年报").click()
    # dropdown = browser.find_element(By.CSS_SELECTOR, ".dropup > .selectpicker")
    # dropdown.find_element(By.XPATH, "//option[. = '年报']").click()
    time.sleep(3)#sleep的原因是需要等待浏览器渲染
    
    css_selector = "body > div.container.sse_content > div > div.col-lg-9.col-xxl-10 > div > div.sse_colContent.js_regular > div.table-responsive > table"
    element = browser.find_element(By.CSS_SELECTOR, css_selector)
    table_html = element.get_attribute('innerHTML')
    fname = f'../nianbao/{code}.html'
    with open(fname,'w',encoding='utf-8') as f:
        f.write(table_html)


def get_table_szse(code):
    browser = webdriver.Chrome()
    url = 'http://www.szse.cn/disclosure/listed/fixed/index.html'
    browser.get(url)
    time.sleep(3)
    
    browser.set_window_size(1550, 840)
    browser.find_element(By.ID, "input_code").click()
    browser.find_element(By.ID, "input_code").send_keys(code)
    time.sleep(3)
    
    browser.find_element(By.CSS_SELECTOR, ".active:nth-child(1) > a").click()
    browser.find_element(By.CSS_SELECTOR, "#select_gonggao .c-selectex-btn-text").click()
    time.sleep(3)
    browser.find_element(By.LINK_TEXT, "年度报告").click()
    time.sleep(3)
    
    css_selector = "#disclosure-table > div > div.table-con-outer > div > table"
    element = browser.find_element(By.CSS_SELECTOR, css_selector)
    table_html = element.get_attribute('innerHTML')
    fname = f'../nianbao/{code}.html'
    with open(fname,'w',encoding='utf-8') as f:
        f.write(table_html)


def get_table(code):
    market = tool.which_market(code)
    if market == 'sse':
        get_table_sse(code)
    elif market == 'szse':
        get_table_szse(code)

import re
import tool

import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

import requests

def download_pdf_from_szse(url):
    options = webdriver.ChromeOptions()
    download_path = "D:\\CS\\py_fi\\scores_3\\nianbao\\src\\pdf"
    profile = {"plugins.plugins_list": [{"enabled": False, "name": "Chrome PDF Viewer"}],
               "download.default_directory": download_path}
    options.add_experimental_option("prefs", profile)
    browser = webdriver.Chrome(chrome_options=options)
    browser.get(url)
    time.sleep(3)
    browser.set_window_size(1552, 840)
    browser.find_element(By.ID, "annouceDownloadBtn").click()
    
    #简便起见,直接使用sleep函数等待下载.但最好还是想办法循环判断是否下载完成
    time.sleep(15)

    print(url + '\n下载完成')

def get_pdf_link_from_szse(code):
    fname = f'../nianbao/{code}.html'
    html = ''
    
    with open(fname,'r',encoding = 'utf-8') as f:
        html = f.read()
    pattern = re.compile('',re.DOTALL)
    links = pattern.findall(html)
    
    #得到的url包含英文版年报或者摘要,需要将这两种年报链接去除
    full_links = []
    for lk in links:
        if '摘要' in lk[1] or '英文' in lk[1]:
            continue
        else:
            full_links.append(lk[0])
            
    for i in range(0,len(full_links)):
        full_links[i] = 'https://www.szse.cn' + full_links[i]
        
    '''
    以上是获取所有的下载链接
    下面是下载,需要调用download_pdf模块
    '''
    for i in range(0,min(len(full_links),10)):
        try: download_pdf_from_szse(full_links[i])
        except: print('股票'+code+'缺失,请到'+
                      full_links[i]+'重新下载')        

def download_pdf_from_sse(url):
    fname = '../pdf/' + url.split('/')[-1]
    with open(fname,'wb') as pdf:
        pdf.write(requests.get(url).content)
        
    print(url + '\n下载完成')    
    
def get_pdf_link_from_sse(code):
    fname = f'../nianbao/{code}.html'
    html = ''
    
    with open(fname,'r',encoding = 'utf-8') as f:
        html = f.read()
        
    pattern = re.compile('class="table_titlewrap" href="(.*?)" target="_blank">(.*?)

结果

结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图 结果截图

解释

解释

橡胶与塑料制品行业是一个重要的制造业领域,涉及到各种橡胶和塑料制品的生产、加工和销售。以下是对该行业的分析:市场规模:橡胶与塑料制品行业市场规模庞大,主要消费者为汽车、电子、建筑、家电、包装等行业。随着全球经济增长和消费需求的不断提升,该行业的市场规模也呈现增长趋势。

技术发展:随着科技的进步,橡胶与塑料制品行业的技术不断创新。新材料的研发和应用促使制造商提高产品的质量和效率,同时减少对环境的影响。例如,生物可降解塑料的研发和使用逐渐增加。

环保压力:橡胶和塑料制品的生产过程中会产生大量废水、废气和固体废弃物,给环境带来污染。因此,环保问题是该行业面临的重要挑战之一。许多国家和地区已经出台严格的环保法规来限制该行业的排放,推动企业进行清洁生产。

竞争形势:橡胶与塑料制品行业竞争激烈,市场上存在着大量的中小型企业。这些企业面临着来自国内外大型企业的竞争压力。规模经济的优势给大型企业带来了一定的竞争优势,但中小型企业通过灵活的市场应对和技术创新仍然具有一定的竞争力。

未来趋势:橡胶和塑料制品行业未来的发展趋势主要集中在以下几个方面:一是环保意识的提升,推动行业向更加环保的方向发展;二是技术创新,例如高性能材料的研发和应用;三是市场需求的变化,例如可降解塑料的应用领域扩大。总体来说,橡胶与塑料制品行业在不断发展和创新中面临着一系列的挑战和机遇,未来的发展前景仍然广阔。企业需要密切关注市场需求变化,加强技术创新和环保措施,以适应行业发展的趋势。

1.贵州轮胎是工程轮胎龙头 公司主营轮胎制造与销售,拥有“前进”,“大力士”,“多力通”等系列品牌,主要产品有全钢载重子午线轮胎,工程机械轮胎,军用轮胎,矿用轮胎,农业轮胎,工业轮胎,林业轮胎,轻卡轮胎等系列上千个规格品种,生产规模与销售收入位于全国同行业前列,公司是全国工程轮胎产量最大的生产厂家之一。

贵州轮胎的营业收入自从创立以来是一直每年都在快速增长的,直到2010年打到峰值高点后,由于当时刚刚经历了全球金融危机,经济复苏的变缓以及行业竞争对手的出现,贵州轮胎的营业收入出现了下滑迹象,一直到2015年贵州轮胎的营业收入都是逐年下降的,之后贵州轮胎积极引进各种新技术,争强自身科技创新实力,研发新品销售,营业收入开始逐年上升,一直到2022年都是稳步增长的2015和2017年贵州轮胎每股收益是负数亏损的,这两年由于经营不佳导致收入下滑,之后的其它年份每股收益都是正增长的。

2.沧州明珠所属橡胶和塑料制品 公司所处行业为橡胶和塑料制品业,主要产品是PE管道、BOPA薄膜和锂离子电池隔膜产品。市场优势 公司通过规模的不断扩大,通过全方位的提高和优化管理、研发、技术、质量、售后服务的能力和水平,PE管道和BOPA薄膜产品已成为行业细分市场的领军企业,锂离子电池隔膜产品也处于行业细分市场的前列。销售网络体系遍布全国各地,形成稳定的供销状态。国际市场销售网络构建日臻完善和成熟。技术优势 公司是国内最大的PE燃气、给水用管材和管件生产基地之一,产品种类和规格配套齐全,设计和生产技术处于国际先进水平,产品品质达到国内同类产品一流水平,可以满足不同层次客户的需求,并成立了国家级实验室——塑料管道研究测试中心。

沧州明珠的营业收入在2017年达到峰值的30多亿,随后尽管开始下降,但是其营业收入一直都维持在20%的高速增长范畴,其公司经营的PE塑料管道在中国市场潜力巨大

其每股收益一直上涨到2017年,随后随着市场的低迷以及公司扩张使得成本支出增加,而后2018年贸易战的影响,其每股收益从2018年开始下降,2019年触底反弹,但后面一直没有再能重回高点,可能和近几年经济不景气有关。

3.永新股份主要生产经营塑胶彩印复合软包装材料、功能性包装(膜)材料、异型注塑包装、吸塑材料、新型油墨等高新技术产品,涉及食品、医药、日化、电子、航空等多个领域。是中国包装龙头企业、国家火炬计划黄山软包装新材料特色产业基地骨干企业、中国驰名商标认定单位,位居中国创新型企业100强,拥有国家企业技术中心、国家地方联合工程实验室、博士后科研工作站、安徽省115产业创新团队、安徽省工程技术中心等创新资源。深入推进永新股份全球化发展战略,即市场营销全球化、材料供应全球化、研发设计全球化和资本运作全球化。进一步坚定永新品牌在中国塑料包装行业的领先地位,使之成为世界一流塑料软包装企业新标杆!

永新股份的营业收入每年稳步增长,其市场销售良好,从15%的营业收入每年增长到20%,其每股收益也是有涨有跌,这可能和公司近几年持续扩大投资生产有关。

以上是我所选行业中部分公司的一些简单分析,篇幅有限,没有全部进行分析。