现在很多页面上的数据都是动态加载,所以使用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()

爬到的数据效果如下:

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐