现在很多页面上的数据都是动态加载,所以使用scrapy来爬取页面,只能得到页面HTML的布局代码,而不能获得数据。
而且对于新手,上路就使用scrapy爬动态数据比较困难,所以使用selenium来打开浏览器,再加载页面获得数据。
需求:统计每天大盘收盘后的汇总数据。
找到了一个网站https://xuangubao.cn/dingpan,每天收盘后的数据都在该页面上。
下面,使用selenium爬取页面上的汇总数据。
第一步,安装selenium
第二步,安装对应浏览器驱动,我使用的谷歌浏览器,所以我安装的chromedriver。注意版本问题。
驱动下载地址:https://chromedriver.storage.googleapis.com/index.html
第三步,安装beautifulsoup4和lxml
第四步,分析页面结构。
数据都在class为“ban-cart”的DIV中的SPAN标签中。
第五步,实现代码:
# 先安装selenium,再安装chromeDriver
from selenium import webdriver
from bs4 import BeautifulSoup
import time
browser = webdriver.Chrome()
browser.get("https://xuangubao.cn/dingpan")
page = browser.page_source
soup = BeautifulSoup(page,"lxml")
# 得到日期
# today = soup.find("div", attrs={"class", "ban-chart-date-container"}).find_all("p")
# print(today[0].get_text().strip(),today[1].get_text().strip(),"日")
date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
print(date)
# 查询涨跌数据
spans = soup.find("div", attrs={"class":"ban-chart"}).find_all("span")
up = spans[3].get_text().strip()
down = spans[4].get_text().strip()
limitUp = spans[6].get_text().strip()
limitDown = spans[7].get_text().strip()
bomb = spans[8].get_text().strip()
print("涨:",up)
print("跌:",down)
print("涨停:",limitUp)
print("跌停:",limitDown)
print("炸板率:", bomb)
# 连板个股
listCount = [] # 连板个数
guList = soup.find("table", attrs={"class", "table hit-pool__table"}).find_all("tr")
for gu in guList[1:]:
tds = gu.find_all("td")
guName = tds[1].find_all("span")[0].get_text().strip()
guCode = tds[1].find_all("a")[0].get_text().strip()[-6:]
# print(guName,"(",guCode,")",":",tds[12].get_text().strip())
listCount.append(tds[12].get_text().strip()) # 将连接数据保存到list
# 显示不同连板的个数
for i in set(listCount):
print("数据{0}在list中的个数为:{1}".format(i, listCount.count(i)))
browser.close()
爬到的数据效果如下: