基于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')
tree.xpath('/html//div')
tree.xpath('//div[@class='main']')
tree.xpath('//*[@id="table_ls"]/table/tbody/tr[1]')
获取文本:text() 返回的是列表
tree.xpath('//*[@id="table_ls"]/table/tbody/tr[1]/td[1]/text()')
tree.xpath('//*[@id="table_ls"]/table/tbody/tr[1]//text()')
获取标签之间的属性值
tree.xpath('....../@atrrName')
对通过selenium爬取的页面源码数据进行解析
tr2=tree.xpath('//*[@id="table_ls"]/table/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()
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)
完整代码如下:
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()
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()
bro.quit()
|