1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何使用 Python 抓取雪球网页?

如何使用 Python 抓取雪球网页?

时间:2023-09-04 07:10:20

相关推荐

如何使用 Python 抓取雪球网页?

后端开发|Python教程

beautifulsoup,Chrome,010389,xueqiu,python

后端开发-Python教程

我想使用beautifulsoup或者其他的python包 抓取 雪球网页上面的一些组合,因为雪球网的组合持仓变动的时候,雪球网不会给提示,比如说,我想抓取这个/P/ZH010389。基本的想法是用程序追踪到他的持仓,然后有变化的时候,程序给我一个提示。

liunx文件系统源码,vscode菜单栏没有了,替换ubuntu源,tomcat部署路径不对,骷髅爬虫片段,php加速软件,seo优化一关键词lzw

##简而言之,要做的事情是:打开这个界面,然后打开这个界面的调仓历史记录,然后记录下他的当前仓位,对比以前的仓位。##

下载源码在哪下载地址,怎么把ubuntu删掉,爬虫爬什么最难,app php,seo335lzw

问题是:由于我对HTML不太了解,我打开Chrome的开发者工具的时候,不知道应该怎么样让我的程序打开他的调仓历史记录。。。

如何制作一个php网站源码,vscode文件名绿色,ubuntu 终端分页,tomcat错误怎么解决,爬虫代理投票,php遍历关联数组,seo技术发展的趋势,爱心捐助网站源码,学校网站免费html模板lzw

这个问题可能比较小白。。。麻烦啦!!!

回复内容:

//好多人说现在关注就有提醒的……呃,题主提问的时候显然没那个功能。我写这个只是自己在学习爬虫过程中的练习。我不炒股也不上雪球……

//好多赞。容我安利一篇自己的回答如何入门 Python 爬虫? – 段晓晨的回答

边做边调边写~

#start coding

首先要知道自己在爬什么~楼主说找到HTML的代码云云,思路其实是错误的。因为我们想要的内容不在原始的html里面。但是肯定在浏览器和服务器之间的通信里,我们只要找到这部分数据就好。

#我用的是Firefox的FireBug

选择网络(Chrome中应该是Network),点击调仓历史记录,如图

可以看到浏览器和服务器之间进行了一次通信。我们截获了一个网址。打开看看。

看上去像是一堆乱,但是细心的话就会发现……

也就是说我们要的数据都在这里了,所以只要先获取这个页面的内容然后在提取数据就好了~

import urllib.requesturl = /cubes/rebalancing/history.json?cube_symbol=ZH010389&count=20&page=1 eq = urllib.request.Request(url,headers=headers)html = urllib.request.urlopen(req).read().decode(utf-8)print(html)

现在关注一个组合,就会有持仓变动的提示了。不过我觉得这事情挺有意思的。比如可以把很多持仓的数据都抓下来,做一些综合的分析,看看现在网站上被持有最多的股票是哪一支,某一天被调入最多的又是哪一支之类。

于是我决定来抓抓看,顺便借此说说我通常用程序做自动抓取的过程。

Step.1 分析页面

要抓一个网页,首先自然是要“研究”这个网页。通常我会用两种方式:

一个是 Chrome 的 Developer Tools。通过它里面的 Network 功能可以看到页面发出的所有网络请求,而大多数数据请求都会在 XHR 标签下。点击某一个请求,可以看到其具体信息,以及服务器的返回结果。很多网站在对于某些数据会有专门的请求接口,返回一组 json 或者 XML 格式的数据,供前台处理后显示。

另一个就是直接查看网页源代码。通常浏览器的右键菜单里都有这个功能。从页面的 HTML 源码里直接寻找你要的数据,分析它格式,为抓取做准备。

对于雪球上的一个组合页面 ,粗略地看了一下它发出的请求,并没有如预想那样直接找到某个数据接口。看源代码,发现有这样一段:

SNB.cubeInfo = {"id":10289,"name":"誓把老刀挑下位","symbol":"ZH010389" ...此处略过三千字... "created_date":".11.25"}SNB.cubePieData = [{"name":"汽车","weight":100,"color":"#537299"}];

雪球网已经改了很多规则,以前的很多代码估计都不能用了

我刚写了一个雪球网的模拟登录,fuck-login/012 at master · xchaoinfo/fuck-login · GitHub

在此基础上修改,可以达到题主的目的,而且可以做到更加简单。

处理 cookies ,不需要每次都登录一次的方法,可以参考 fuck-login/001 zhihu at master · xchaoinfo/fuck-login · GitHub 的处理方法。

需要两个模块配合:

爬虫模块:单纯负责抓取和存储数据

数据处理模块:处理爬虫存储的数据。如发现某个人某个持仓数据发生了变化,向你发出通知

该爬虫的简单的流程:

定时访问目标页面

抓取当前目标页面的数据,存入数据库

数据处理模块简单的流程:

定时访问数据库

数据库中的数据满足某个条件时执行自己设定的动作

抓取雪球的数据?巧了,刚看到一篇文章专门讲这个的,推荐给大家:互联网金融爬虫怎么写已关注的组合会收到调仓通知。

#技术宅都好暴力,看不到调仓就直接抓……#

我在 @段晓晨的基础上做了一点点优化,目前是这样的。

测试前请把帐号密码填上

更新内容:

增加了自动获取cookie

修改了一下显示组合改变的代码

import urllib.requestimport jsonimport http.cookiejar#设置cookieCookieJar = http.cookiejar.CookieJar()CookieProcessor = urllib.request.HTTPCookieProcessor(CookieJar)opener = urllib.request.build_opener(CookieProcessor)urllib.request.install_opener(opener)#登陆获得cookieparams = urllib.parse.urlencode({username:*****,password:*****}).encode(encoding=UTF8)headers = {User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:38.0) Gecko/0101 Firefox/38.0}request = urllib.request.Request(/user/login,headers=headers)httpf = opener.open(request, params)#获得组合url = /cubes/rebalancing/history.json?cube_symbol=ZH340739&count=20&page=1 eq = urllib.request.Request(url,headers=headers)html = urllib.request.urlopen(req).read().decode(utf-8)data = json.loads(html)stockdata = data[list][0][ ebalancing_histories]for i in range(len(stockdata)):print(股票名称,end=:)print(stockdata[i][stock_name],end= 持仓变化)print(stockdata[i][prev_weight],end=-->)print(stockdata[i][ arget_weight])

首先需要三个库:urllib2,cookielib,json

然后用firefox 打开誓把老刀挑下位 并登陆,然后找到 cookie文件,

最后调仓记录的地址是:/cubes/rebalancing/history.json?cube_symbol=ZH010389&count=20&page=1 用urllib2 和coolielib 伪造header,和cookie 访问 就可以得到 json文件格式的调仓记录,然后用json 处理 就可以了

题主不知道关注后有推送提示么 ……

用shell

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。