基于selenium爬取资金流向图

基于selenium爬取资金流向图,第1张

基于selenium爬取资金流向图 基于selenium爬取华联控股资金一览流向图

由于资金一览流向图是由网页动态加载的数据无法通过普通的requests模块获取,而通过selenium模块对动态数据的抓取更加便捷。

爬虫基本流程:对指定url发起请求,获取源码数据,解析数据

selenium模块 使用的流程

环境安装:pip install selenium

下载浏览器的驱动程序:

http://npm.taobao.org/mirrors/chromedriver/

实例化一个浏览器对象:

from selenium import webdriver
bro=webdriver.Chrome(executable_path='./chromedriver.exe')##返回一个浏览器对象

让浏览器对指定url发起一个请求

bro.get('https://data.eastmoney.com/zjlx/000036.html')

获取浏览当前页面的源码数据

page_text=bro.page_source
通过xpath解析数据

通过selenium模块得到的页面源码数据通过xpath进行定位解析。

xpath数据解析流程

环境安装:pip install lxml

实例化一个etree对象

from lxml import etree
tree=etree.HTML(page_text)
xpath标签定位和文本数据的获取

标签定位

## / 表示一个层级
tree.xpath('/html/dody/div')##返回的是列表,并且是element队形
## // 表示多个层级
tree.xpath('/html//div')##返回页面所有标签为div的对象
## 属性定位
tree.xpath('//div[@class='main']')##返回class属性值为main的div
## 索引定位:有多个相同标签定位其中某个标签。注意:索引从1开始
tree.xpath('//*[@id="table_ls"]/table/tbody/tr[1]')

获取文本:text() 返回的是列表

## /text() 只能获取所定位标签下的直系文本数据
tree.xpath('//*[@id="table_ls"]/table/tbody/tr[1]/td[1]/text()')
## //text() 能够获取所定位标签下的所有文本数据
tree.xpath('//*[@id="table_ls"]/table/tbody/tr[1]//text()')

获取标签之间的属性值

tree.xpath('....../@atrrName')#atrrName为属性值的标签
对通过selenium爬取的页面源码数据进行解析
tr2=tree.xpath('//*[@id="table_ls"]/table/tbody/tr')##获取tbody下的所有tr标签
for j in range(len(tr2)):
    data=tr2[j].xpath('.//text()')
将解析到的数据写入mysql数据库 数据写入流程

连接mysql

import pymysql
conn = pymysql.connect(
    host= 'localhost',
    user= 'root',
    passwd='',
    database='family',
    port=3306 ,
    charset='utf8'
)

创建数据表

cursor = conn.cursor()
##创建mysql数据表
cursor.execute("drop table if exists 华联控股资金一览流向表")
sql = """
        create table 华联控股资金一览流向表(
        日期 VARCHAr(255),
        收盘价 VARCHAr(255),
        涨跌幅 VARCHAr(255),
        主力净流入净额 VARCHAr(255),
        主力净流入净占比 VARCHAr(255),
        超大单净流入净额 VARCHAr(255),
        超大单净流入净占比 VARCHAr(255),
        大单净流入净额 VARCHAr(255),
        大单净流入净占比 VARCHAr(255),
        中单净流入净额 VARCHAr(255),
        中单净流入净占比 VARCHAr(255),
        小单净流入净额 VARCHAr(255),
        小单净流入净占比 VARCHAr(255)
        )
    """
cursor.execute(sql)
sql1 = """insert into 华联控股资金一览流向表
values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""" 

插入数据

cursor.execute(sql1,data)##data为将要向mysql插入的数据

完整代码如下:

from selenium import webdriver
from lxml import etree
import pymysql
conn = pymysql.connect(
    host= 'localhost',
    user= 'root',
    passwd='',
    database='family',
    port=3306 ,
    charset='utf8')
cursor = conn.cursor()
##创建mysql数据表
cursor.execute("drop table if exists 华联控股资金一览流向表")
sql = """
        create table 华联控股资金一览流向表(
        日期 VARCHAr(255),
        收盘价 VARCHAr(255),
        涨跌幅 VARCHAr(255),
        主力净流入净额 VARCHAr(255),
        主力净流入净占比 VARCHAr(255),
        超大单净流入净额 VARCHAr(255),
        超大单净流入净占比 VARCHAr(255),
        大单净流入净额 VARCHAr(255),
        大单净流入净占比 VARCHAr(255),
        中单净流入净额 VARCHAr(255),
        中单净流入净占比 VARCHAr(255),
        小单净流入净额 VARCHAr(255),
        小单净流入净占比 VARCHAr(255)
        )
    """
cursor.execute(sql)
sql1 = """insert into 华联控股资金一览流向表 values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""" 
bro=webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://data.eastmoney.com/zjlx/000036.html')
##获取响应页面的源码数据
page_text=bro.page_source
###标签定位并解析数据
##实例化对象
tree=etree.HTML(page_text)
##定位
tr2=tree.xpath('//*[@id="table_ls"]/table/tbody/tr')
for j in range(len(tr2)):
    data=tr2[j].xpath('.//text()')
    cursor.execute(sql1,tr2[j].xpath('.//text()'))
conn.commit()##保存对数据库的修改
cursor.close()  # 关闭游标
conn.close() ##关闭mysql连接

bro.quit()

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4654522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存