前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​selenium实战爬取股票

​selenium实战爬取股票

原创
作者头像
ruochen
修改2021-11-20 16:37:31
5420
修改2021-11-20 16:37:31
举报
文章被收录于专栏:若尘的技术专栏

selenium库的使用

项目的灵感

<img src="https://img-blog.csdnimg.cn/20201122112749272.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhbnN0eV96aA==,size_16,color_FFFFFF,t_70#pic_center" alt="在这里插入图片描述">

今天准备去码市上找几个实战的项目来练练手,于是就发现了这个项目(这个项目已经结束)

他还有两个需求,后面两个需求都差不多,我就不再去写代码了

必要知识

1.对于一些初级的知识,我之前的博客都有写,你们可以去看看
2.selenium的无界面化操作
代码语言:txt
复制
self.opt = Options()
self.opt.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
self.opt.add_argument('window-size=1920x3000')  # 设置浏览器分辨率
self.opt.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
self.opt.add_argument('--hide-scrollbars')  # 隐藏滚动条,应对一些特殊页面
self.opt.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片,提升运行速度
self.opt.add_argument('--headless')  # 浏览器不提供可视化界面。Linux下如果系统不支持可视化不加这条会启动失败
# opt.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置
self.driver=Chrome(options=self.opt)
#创建无界面对象

由于我主要是封装到类里面的,所以会有self,不需要的只要删除self就好

3.xlwt的保存数据
代码语言:txt
复制
# 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding='utf-8')
# 创建一个worksheet
worksheet = workbook.add_sheet('股票最新价格')
# 写入excel
# 参数对应 行, 列, 值
worksheet.write(0, 0, "个股代码")
worksheet.write(0, 1, "个股名称")
worksheet.write(0, 2, "最新价格")
for i in range(len(number)):
    worksheet.write(i + 1, 0, number[i])
    worksheet.write(i + 1, 1, name[i])
    worksheet.write(i + 1, 2, money[i])
workbook.save('股票最新价格.xls')

完整的代码展示

代码语言:txt
复制
import xlwt
import parsel
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import time
class get_gupaio():
    def __init__(self):
        url = "http://quote.eastmoney.com/center/gridlist.html"
        self.opt = Options()
        self.opt.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
        self.opt.add_argument('window-size=1920x3000')  # 设置浏览器分辨率
        self.opt.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
        self.opt.add_argument('--hide-scrollbars')  # 隐藏滚动条,应对一些特殊页面
        self.opt.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片,提升运行速度
        self.opt.add_argument('--headless')  # 浏览器不提供可视化界面。Linux下如果系统不支持可视化不加这条会启动失败
        # opt.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置
        self.driver=Chrome(options=self.opt)
        #创建无界面对象
        self.driver.implicitly_wait(10)
        self.driver.get(url)
    def get_one_page(self,content):
        # print(content)
        sel=parsel.Selector(content)
        number=sel.xpath("//tbody/tr/td[2]/a/text() ").getall()
        # print(number)
        # print(len(number))
        name=sel.xpath("//tbody/tr/td[@class='mywidth']/a/text()").getall()
        # print(name)
        money=sel.xpath("//tbody/tr/td[5]/span/text()").getall()
        # print(money)
        # print(len(money))
        return number,name,money

    def save_data(self,number,name,money):
        # 创建一个workbook 设置编码
        workbook = xlwt.Workbook(encoding='utf-8')
        # 创建一个worksheet
        worksheet = workbook.add_sheet('股票最新价格')
        # 写入excel
        # 参数对应 行, 列, 值
        worksheet.write(0, 0, "个股代码")
        worksheet.write(0, 1, "个股名称")
        worksheet.write(0, 2, "最新价格")
        for i in range(len(number)):
            worksheet.write(i + 1, 0, number[i])
            worksheet.write(i + 1, 1, name[i])
            worksheet.write(i + 1, 2, money[i])
        workbook.save('股票最新价格.xls')

    def run(self):
        number = []
        name = []
        money = []
        for i in range(10):
            		self.driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[5]/div/div[2]/div/input").clear()
            self.driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[5]/div/div[2]/div/input").send_keys(i + 1)
             self.driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[5]/div/div[2]/div/a[3]").click()
            time.sleep(1)
            content = self.driver.page_source
            (a, b, c) = self.get_one_page(content)
            number.extend(a)
            name.extend(b)
            money.extend(c)
        print(number)
        print(name)
        print(money)
        self.save_data(number, name, money)
        self.driver.quit()
get_gupaio().run()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • selenium库的使用
    • 项目的灵感
      • 必要知识
        • 完整的代码展示
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档