阅读 200

Selenium 抓取东方网数据

实验 3

3.1 题目

熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容;

使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。

候选网站:东方财富网:quote.eastmoney.com/center/grid…

3.2 思路

3.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)

不然他会请求会很快,以至于你虽然翻到第二页了,但是还是爬取第一页的信息!!

3.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) 复制代码

3.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) 复制代码

在这里插入图片描述


作者:小生凡一
链接:https://juejin.cn/post/7032893811185745950


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐