这里写自定义目录标题
python爬取上市公司财务数据
爬取入口
http://data.eastmoney.com/bbsj/201112/yjbb.html
使用selenium进行爬取的,本来参考其他博主的代码,但是有人反馈遇到乱码问题,我使用pandas read_html()进行解析的,没有碰到,效率还是很高的,也比较通用。
上代码吧
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import pandas as pd
import os
from time import sleep
chrome_options = webdriver.ChromeOptions()
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.maximize_window() # 最大化窗口
wait = WebDriverWait(browser, 10)
df=pd.DataFrame()
for p in range(2010,2021):
url = 'http://data.eastmoney.com/bbsj/'+str(p)+'12/yjbb.html'
print(url)
browser.get(url)
i=1
page=0
while True:
element = browser.find_elements_by_class_name("dataview-body")
tb = pd.read_html(element[0].get_attribute("outerHTML"))[0]
tb["年份"]=p
df=df.append(tb)
#判断是否最后一页
nextpage = browser.find_elements_by_link_text("下一页")
if len(nextpage)==0:
break
i=i+1
#翻页功能
while True:
try:
next_page =wait.until(EC.presence_of_element_located((By.LINK_TEXT,"下一页")))
wait.until(EC.element_to_be_clickable((By.LINK_TEXT,"下一页")) )
next_page.click()
if wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME,"active"), str(i))):
break
except:
pass
df.to_excel("C:\\Users\\CT\\Desktop\\222.xlsx")