实战练习:Selenium 抓取东方网数据

发表于:2021-11-26 09:29

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

 作者:小生凡一    来源:稀土掘金

  1.1 题目
  熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容;
  使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
  候选网站:东方财富网:quote.eastmoney.com/center/grid…
  1.2 思路
  1.2.1 发送请求
  ·引入驱动
  chrome_path = r"D:\Download\Dirver\chromedriver_win32\chromedriver_win32\chromedriver.exe"  # 驱动的路径
  browser = webdriver.Chrome(executable_path=chrome_path)

  · 保存需要爬取的版块
      target = ["hs_a_board", "sh_a_board", "sz_a_board"]
      target_name = {"hs_a_board": "沪深A股", "sh_a_board": "上证A股", "sz_a_board": "深证A股"}

  计划是爬取三个模板的两页信息。
  ·发送请求
      for k in target:
          browser.get('http://quote.eastmoney.com/center/gridlist.html#%s'.format(k))
          for i in range(1, 3):
              print("-------------第{}页---------".format(i))
              if i <= 1:
                  get_data(browser, target_name[k])
                  browser.find_element_by_xpath('//*[@id="main-table_paginate"]/a[2]').click() # 翻页
                  time.sleep(2)
              else:
                  get_data(browser, target_name[k])

  注意: 这里的翻页一点要time.sleep(2)
  不然他会请求会很快,以至于你虽然翻到第二页了,但是还是爬取第一页的信息!!
  1.2.2 获取节点
  解析网页的时候也要implicitly_wait等待一下。
    browser.implicitly_wait(10)
    items = browser.find_elements_by_xpath('//*[@id="table_wrapper-table"]/tbody/tr')

  然后这个items就是所以的信息了。
 
     for item in items:
          try:
              info = item.text
              infos = info.split(" ")
              db.insertData([infos[0], part, infos[1], infos[2],
                    infos[4], infos[5],
                    infos[6], infos[7],
                    infos[8], infos[9],
                    infos[10], infos[11],
                    infos[12], infos[13],
                    ])
          except Exception as e:
              print(e)

  1.2.3 保存数据
  数据库类,封装了初始化和插入操作。
  class database():
      def __init__(self):
          self.HOSTNAME = '127.0.0.1'
          self.PORT = '3306'
          self.DATABASE = 'scrapy_homeword'
          self.USERNAME = 'root'
          self.PASSWORD = 'root'
          # 打开数据库连接
          self.conn = pymysql.connect(host=self.HOSTNAME, user=self.USERNAME, password=self.PASSWORD,
                                      database=self.DATABASE, charset='utf8')
          # 使用 cursor() 方法创建一个游标对象 cursor
          self.cursor = self.conn.cursor()
      def insertData(self, lt):
          sql = "INSERT INTO spider_gp(序号,板块,股票代码 , 股票名称 , 最新报价 ,涨跌幅 ,涨跌额,成交量,成交额 , 振幅, 最高 , 最低 , 今开   , 昨收 ) " \
                "VALUES (%s,%s, %s, %s, %s, %s,%s, %s, %s, %s, %s,%s,%s,%s)"
          try:
              self.conn.commit()
              self.cursor.execute(sql, lt)
              print("插入成功")
          except Exception as err:
              print("插入失败", err)


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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号