赞
踩
同学问能不能爬虫下载年报,要下很多公司,一个一个搜索下载太慢了...
这种重复性的劳动交给Python脚本可太适合了
核心思想还是使用selenium库去模拟人输入股票代码和搜索下载。
北交所网站:
导入包
- from selenium import webdriver
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.common.by import By
-
- from bs4 import BeautifulSoup
- import os
- import pandas as pd
- from time import sleep
模拟点击:
这里用的是edge的驱动器,需要去官网下载:
然后把msedgedriver.exe文件和代码放在一个目录下就能运行了。
使用EdgeOptions()的类设置了一下浏览器的设置,让pdf下载的位置都进行了设定,免得下载了找不到......
要下载的公司的股票代码放在stock列表里面就行。我这里就只用了两个公司测试一下。
- from selenium.webdriver import Edge
- from selenium.webdriver.edge.options import Options as EdgeOptions
- options = EdgeOptions()
- options.add_experimental_option('prefs', {
- "download.default_directory": 'D:\\AAA最近要用\\下载', #下载的年报存储路径
- "download.prompt_for_download": False, #To auto download the file
- "download.directory_upgrade": True,
- "plugins.always_open_pdf_externally": True #It will not show PDF directly in chrome
- })
-
-
- driver = webdriver.Edge("msedgedriver", options=options)
- url = "http://www.bse.cn/disclosure/announcement.html"
- driver.implicitly_wait(10)
- driver.get(url)
- sleep(5)
- stock=['837344','837242'] #代码列表
- driver.find_element(By.XPATH,'//*[@id="root"]/div[4]/div/div/div[1]/div/div[1]/div/div[4]/div/div/span[2]').click()
- for i in range(len(stock)):
- code=driver.find_element(By.XPATH,'//*[@id="companyCode"]')
- code.clear()
- code.send_keys(stock[i])
- driver.find_element(By.XPATH,'//*[@id="submit "]').click()
-
- driver.find_element(By.XPATH,'//*[@id="table"]/table/tbody/tr[1]/td[4]/a').click()#下载摘要
- sleep(5)
- driver.find_element(By.XPATH,'//*[@id="table"]/table/tbody/tr[2]/td[4]/a').click()#下载报告
- sleep(5)
- code.clear()
- sleep(2)
- print(f'{stock[i]}的2021年年报下载完成')
-
- driver.quit()
上面代码就是输入股票代码,点击查询,然后点击前两个pdf链接,然后清空搜索行重新输入下一个股票代码,查询,下载.....循环往复。
我这里模拟只点击了 前两个pdf文件,也就是2021的年报和摘要。如果需要更多的年份也是可以再加几个Xpath路径点击就行。
然后就下载完成啦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。