爬取当天龙虎榜买入机构大于2并且涨停的股票
龙虎榜机构每日买卖网址:机构买卖每日统计 _ 数据中心 _ 东方财富网
首先将当前页面的数据获取下来:
# 设置变量url
url = 'http://data.eastmoney.com/stock/jgmmtj.html'
# 设置发那个问的浏览器的路径,webdriver放在python目录下,不用设置路径
path = 'F:\\program\\ProgramData\\ancondas3\\chromedriver.exe'
option = webdriver.ChromeOptions() # 网址获取
# option.add_argument('headless') # 网址不弹出
browser = webdriver.Chrome(options=option, executable_path=path)
browser.get(url)
time.sleep(2)
element = browser.find_element_by_xpath('//*[@id="dataview"]/div[2]/div[2]/table')
# 获取表body
tbody_content = element.find_elements_by_css_selector('#dataview > div.dataview-center > div.dataview-body > table > tbody > tr')
# 将表body str存储为list
tbody_str = []
for tbody in tbody_content:
tbody_str.append(tbody.text)
print(tbody_str)
用到的方法是selenium的元素定位:
- find_element_by_xpath(‘xpath’)去网址按F12,用元素查找,找到table元素位置,右键copy->xpath
- find_elements_by_css_selector('selector‘)方法同上,copy->selector
获取到的table数据,每一行是一个字符串,中间用空格隔开的,所以需要自己清洗数据:
# 将body的每一行信息拆分存储为list
tbody_series = []
for str in tbody_str:
str = str.replace('%', '') # 去掉字符串中的%,以便后面进行计算数据
list = str.split(' ', 16)
tbody_series.append(list)
# 将数据转为DataFrame,加上列名
df_lhb = pd.DataFrame(tbody_series).loc[:, [1, 2, 5, 6, 7]].rename(
columns={1: '股票代码', 2: '股票名称', 5: '收盘价', 6: '涨幅', 7: '买入机构'})
# print(df_lhb)
df_lhb['涨幅'] = df_lhb['涨幅'].astype(float)
df_lhb['买入机构'] = df_lhb['买入机构'].astype(int)
print(df_lhb)
用到的发方法就是:list = str.split(''),字符串里带有%,用str.replace('%', '')去掉%,然后,转为DFrame格式,返回的结果如下:
然后计算涨幅大于2并且涨停的股票:
result = df_lhb[(df_lhb['买入机构'] >= 2) & (df_lhb['涨幅'] > 9.95)]
print(result)
结果如下:
?后面研究翻页爬取,这个方法爬取数据很慢,还要继续学习研究
|