MySQL
数据库存储
技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:quote.eastmoney.com/center/grid…
思路
一、发送请求
·引入驱动 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) 不然他会请求会很快,以至于你虽然翻到第二页了,但是还是爬取第一页的信息!!
二、获取节点
·解析网页的时候也要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)
三、保存数据
·数据库类,封装了初始化和插入操作 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),我们将立即处理
来这里,成为51Testing签约原创作者!