爬取东方财富网数据笔记
小白是如何学习爬虫的?首先先从简单的入手,在b站上寻找爬虫视频,这里推荐Python爬虫编程基础5天速成(2021全新合集)Python入门+数据分析_哔哩哔哩_bilibili
有编程基础的仅需要观看其中部分爬虫视频即可,如果没有编程基础可以自行观看完整视频。这里的爬虫讲解以豆瓣电影Top250的信息爬取为主,所以通过学习如何爬取豆瓣电影信息为基础,在此基础上摸索爬取东方财富网的信息数据。(爬取豆瓣的代码,在视频中有非常完整的讲解)
一、下面首先爬取了东方财富网的Title
网址:平安银行(000001)资金流向 _ 数据中心 _ 东方财富网 (eastmoney.com)
详细代码如下所示(包含部分代码解释) :
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request,urllib.error # 制定URL,获取网页数据
import xlwt # 进行excel操作def main():baseurl = "http://data.eastmoney.com/zjlx/000001.html"# 1.爬取网页datalist = getDate(baseurl)# 2.逐一解析数据# 3.打印数据或保存到当前代码文件夹下 savepath = "东方财富名称.xlsx"saveData(datalist, savepath)# 创建正则表达式的对象
findTitle = re.compile(r'<a href="(.*?)">(.*?)</a>')# 爬取网页
def getDate(baseurl):datalist = []html = askURL(baseurl) # 保存获取到的网页源码# 2.逐一解析数据 在网页的解析中,寻找到需要的信息代码块soup = BeautifulSoup(html,"html.parser")for item in soup.find_all('tr'):for it in item.find_all('td'):it = str(it)tirle = re.findall(findTitle, it)if len(tirle)!=0:datalist.append(tirle[0][1])# print(datalist)return datalist# 得到指定一个URL的网页内容
def askURL(url):# 用户代理,表示告诉网页服务器,是何种类型的机器、浏览器# 模拟浏览器头部信息,向网页服务器发送信息headers = {"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 94.0.4606.61Safari / 537.36Edg / 94.0.992.31"}request = urllib.request.Request(url,headers=headers)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)return html# 保存数据
def saveData(datalist,savepath):print('Title:\n', datalist)book = xlwt.Workbook(encoding="utf-8", style_compression=0)# cell_overwrite_ok=True每一个单元往里面输入的时候直接覆盖掉里面的内容sheet = book.add_sheet('东方财富名称', cell_overwrite_ok=True) # 向xlsx表中横向添加标题for i in range(0, 20):print("执行完第%d条"%(i+1))data = datalist[i]# print(data)sheet.write(0, i, data)book.save(savepath) # 保存print('Title:\n',datalist)if __name__ == "__main__":# 调用函数main()print("爬取完毕!")
二、爬取了东方财富网数据
其次进行最终的东方财富网数据的爬取会发现套用上面的代码并不能获取到我们想要的数据,这是因为上述代码以及豆瓣爬虫代码,都是爬取静态页面所用的代码,而东方财富网的数据是一个动态并且数据会不断变化的,这样看来就要对代码进行改写,但大体上的思路并没有改变。
进而学习了如何将动态数据的爬取并将其保存到数据库中,这里推荐爬虫实战 | 爬取东方财富网股票数据_cainiao_python的博客-CSDN博客_爬取东方财富网数据
想要将数据保存在csv中的同学,可以参考以上推荐博文。
示例网页:富奥股份(000030)资金流向 _ 数据中心 _ 东方财富网 (eastmoney.com)
2.1 爬取下列动态数据:
2.2 寻找网页源代码中自己所需部分:
2.3 向网页发起访问请求:
headers = {'User-Agent':'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 94.0.4606.81Safari / 537.36Edg / 94.0.992.50' }
params = {'cb': 'jQuery11230696442006331776_1634611526503','lmt': '0','klt': '101','fields1': 'f1,f2,f3,f7','fields2': 'f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65','ut': 'b2884a393a59ad64002292a3e90d46a5','secid': '0.000030','_': '1634611526504'}
response = requests.get('http://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get', headers=headers, params=params)
print(response.text)
2.4 利用正则表达式对数据进行分析:
kliness = re.findall('"klines":(.*),', response.text)
# kliness1=kliness[0].split('"')
kliness1 = ','.join(kliness)
kliness2 = kliness1.strip('[')
kliness3 = kliness2.split('"')
print(kliness3)
2.5连接数据库,向数据库中保存数据
# 链接数据库
connect = pymysql.connect(host='localhost', port=3306, user='****', passwd='****', database='****', charset='utf8')
print('成功与数据库连接')
# 使用该链接创建并返回的游标
cur = connect.cursor()
# 编写创建表的sql语句
sql = '''create table IdData(riqis text ,zhujinges text ,xiaojinges text ,zhongjinges text ,dajinges text ,chaodajinges text ,shoupanjias text ,zhangdiefus text
)'''
# 执行一个数据库查询和命令
cur.execute(sql)
connect.commit()
# 这里以倒序的方式呈现进入数据库 即2021-10-19、2021-10-18……
for i in range(-len(kliness3), -1):if len(kliness3[i]) >= 2:# 重新连接数据库connect.ping(reconnect=True)data = kliness3[-i].split(',')# print(data)# 编写插入数据的sql语句into = "INSERT INTO IdData(riqis,zhujinges,xiaojinges,zhongjinges,dajinges,chaodajinges,shoupanjias,zhangdiefus) values (%s,%s,%s,%s,%s,%s,%s,%s)"# 执行一个数据库查询和命令cur.execute(into, (data[0], data[1], data[2], data[3], data[4], data[5], data[11], data[12]))# 提交数据库操作connect.commit() # 关闭数据库connect.close()
2.6 调取函数执行主函数:
if __name__ == '__main__':main()print("爬取成功!")
2.7 执行后结果演示:
最后附完整代码:
import requests
import re
import pymysqldef main():headers = {'User-Agent':'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 94.0.4606.81Safari / 537.36Edg / 94.0.992.50' }params = {'cb': 'jQuery11230696442006331776_1634611526503','lmt': '0','klt': '101','fields1': 'f1,f2,f3,f7','fields2': 'f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65','ut': 'b2884a393a59ad64002292a3e90d46a5','secid': '0.000030','_': '1634611526504'}response = requests.get('http://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get', headers=headers, params=params)# print(response.text)kliness = re.findall('"klines":(.*),', response.text)# kliness1=kliness[0].split('"')kliness1 = ','.join(kliness)kliness2 = kliness1.strip('[')kliness3 = kliness2.split('"')# print(kliness3)connect = pymysql.connect(host='localhost', port=3306, user='****', passwd='****', database='****', charset='utf8')print('成功与数据库连接')# 使用该链接创建并返回的游标cur = connect.cursor()sql = '''create table IdData(riqis text ,zhujinges text ,xiaojinges text ,zhongjinges text ,dajinges text ,chaodajinges text ,shoupanjias text ,zhangdiefus text)'''# 执行一个数据库查询和命令cur.execute(sql)connect.commit()# 数据插入for i in range(-len(kliness3), -1):if len(kliness3[i]) >= 2:connect.ping(reconnect=True)data = kliness3[-i].split(',')# print(data)into = "INSERT INTO IdData(riqis,zhujinges,xiaojinges,zhongjinges,dajinges,chaodajinges,shoupanjias,zhangdiefus) values (%s,%s,%s,%s,%s,%s,%s,%s)"# 执行一个数据库查询和命令cur.execute(into, (data[0], data[1], data[2], data[3], data[4], data[5], data[11], data[12]))connect.commit()connect.close()print("插入成功")if __name__ == '__main__':main()print("爬取成功!")
三、爬虫过程中容易出现的问题
1)学习豆瓣爬虫过程中,因为豆瓣具有反爬机制,所以在爬取信息时出现404、403等问题,这里采用的方法是刷新自己电脑的IP方法:Windows键+r快速打开Windows系统的“运行”窗口,然后在这里输入cmd后点确定即运行“命令提示符”窗口,再输入ipconfig/flushdns,得到如下界面,则表示IP重置,操作成功。
2)在网页的HTML中找到自己所需要的信息数据。首先我们按F12打开开发者模式,对网页进行观察,往往从get中寻找所需数据位置,并对网页源代码进行分析,从而利用正则表达式将有效信息提取出来。
3)将数据插入数据库中,无法将所有数据一次性插入。解决方法:在循环插入数据中加如下代码:
connect.ping(reconnect=True)
出现错误的原因:在循环中增加了关闭数据库的操作,而后没有再次连接数据库,connect断开连接后,可以使用connect.ping(reconnect=True)将重新连接到数据库。
本文仅供参考学习
爬取东方财富网数据笔记相关推荐
- 用python爬取东方财富网网页信息_爬取东方财富网数据的网页分析
自学Python已有3个月之多,浏览无数大神的佳作,收获颇丰.当初自学python就是为了学习爬虫,爬取网站上好看妹子的图片--[流口水][流口水] 言归正传,近期学习量化交易知识,发现东方财富网(e ...
- 用python爬虫爬取东方财富网信息网页信息_爬取东方财富网数据的网页分析
自学Python已有3个月之多,浏览无数大神的佳作,收获颇丰.当初自学python就是为了学习爬虫,爬取网站上好看妹子的图片--[流口水][流口水] 言归正传,近期学习量化交易知识,发现东方财富网(e ...
- 使用python爬取东方财富网机构调研数据
最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了 ...
- 爬取东方财富网股票行情数据和资讯
爬取东方财富网股票行情数据和资讯 这个需求源于我的一个练手项目 本篇博客参考:https://zhuanlan.zhihu.com/p/50099084 该博客介绍的东西本博客不做论述 使用技术: 语 ...
- python爬取东方财富网资金流向数据(在本地生成csv文件)
今天我们来试着用python爬取东方财富网资金流向的表格数据. 第一步:程序及应用的准备 首先我们需要安装selenium库,使用命令pip install selenium;然后我们需要下载对应的c ...
- 爬虫学习笔记(用python爬取东方财富网实验)
参考文章以及视频:(11条消息) 爬虫实战 | 爬取东方财富网股票数据_简说Python的博客-CSDN博客.手把手教你从东方财富网上获取股票数据_哔哩哔哩_bilibili.[Python爬虫案例] ...
- python培训机构调研最多的股票_使用python爬取东方财富网机构调研数据
标签: 最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只 ...
- 利用python爬取东方财富网股吧评论并进行情感分析(一)
利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论.涉及内容在前人的研究基础之 ...
- python爬虫爬取东方财富网股票走势+一些信息
一.目标 我们的目标是爬取东方财富网(https://www.eastmoney.com/)的股票信息 我的目标是爬取100张股票信息图片 经过实际测试我的爬取范围为000001-000110,000 ...
最新文章
- JCIM| 基于双向RNN的分子生成模型
- 求最大公约数——辗转相除法
- 学习分享|量化风控从入门到放弃
- Windows安全加固系列
- mysql悲观锁优化_MySQL事务及实现、隔离级别及锁与优化
- paip.c++ qt 网页爬虫 的 网络编程 总结
- ES6精华:解构赋值
- 对SQLite数据库操作 操作db文件
- php代码审计系列教程,PHP代码审计工具——Rips详细使用教程
- ApacheCN 翻译活动进度公告 2019.6.21
- sql分组排序语句顺序
- cd 命令行进入目标文件夹
- 域名被QQ和微信拦截?域名红了无法推广教你一段代码搞定!
- U3D资源导出至Laya
- 0基础不用怕,从0到1轻松教你入门Python
- 抗扰度试验--EMS--电压暂降、短时中断--DIP
- 山东2016年高考高校理工科录取人数统计
- 随心所欲b超工作站图像处理_正版B超随心所欲超声工作站vista版最新版模拟数字影像软件win7...
- 如何把原型保存为图片?
- 数据结构实战-死磕王争