selenium实战爬取股票

发表于:2021-2-23 09:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:tansty_zh    来源:CSDN

  项目的灵感
  今天准备去码市上找几个实战的项目来练练手,于是就发现了这个项目(这个项目已经结束)。
  他还有两个需求,后面两个需求都差不多,我就不再去写代码了。必要知识:
  1.对于一些初级的知识,我之前的博客都有写,你们可以去看看
  2.selenium的无界面化操作
  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的保存数据
  # 创建一个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')
  完整的代码展示
  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()

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号