如何使用 Python 抓取雪球网页

如何使用 Python 抓取雪球网页,第1张

Step1 分析页面

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

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

Step2 获取页面

分析完毕,开抓。

直接 urlliburlopen 向目标网页发送请求,读出网页。结果,失败了……

看了下返回结果:

403 Forbidden

You don't have permission to access the URL on this server Sorry for the inconvenience

被拒了,所以这种赤裸裸地请求是不行的。没关系,那就稍微包装一下:

send_headers = {

'User-Agent':'Mozilla/50 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/53736 (KHTML, like Gecko) Chrome/430235781 Safari/53736',

'Accept':'text/html,application/xhtml+xml,application/xml;q=09,/;q=08',

'Connection':'keep-alive',

'Host':'xueqiucom',

'Cookie':r'xxxxxx',

}

req = urllib2Request(url, headers=send_headers)

resp = urllib2urlopen(req)

html = respread()

header 数据都可以从 Developer Tools 里拿到。这次顺利抓到页面内容。

一般网站或多或少都会对请求来源做一些阻拦,通过加 header 可以搞定大部分情况。

Step3 提取数据

因为这个数据比较明显,直接用通过一些字符串查找和截取 *** 作就可以取出来。

pos_start = htmlfind('SNBcubeInfo = ') + len('SNBcubeInfo = ')

pos_end = htmlfind('SNBcubePieData')

data = html[pos_start:pos_end]

dic = jsonloads(data)

dic 就是一个包含数据的字典对象。之后想干什么就随便你了。

对于复杂一点的情况,可以通过 BeautifulSoup 来定位 html 标签。再不好办的,就用正则表达式,基本都可以解决掉。

Step4 处理数据

因为我想对数据进行持久化存储,并且做展示和分析,所以我用了 django 里的 ORM 来处理抓下来的数据。

# add Portfolio

portfolio, c = modelsPortfolioobjectsget_or_create(code=dic['symbol'])

portfolioname = dic['name']

portfolioearnings = dic['total_gain']

portfoliosave()

# add Stock

stocks = dic['view_rebalancing']['holdings']

for s in stocks:

stock, c = modelsStockobjectsget_or_create(code=s['stock_symbol'])

stockname = s['stock_name']

stockcount += 1

stockweight += s['weight']

stocksave()

Portfolio 记录下组合及其收益,Stock则记录每支股票的被收录数和总收录份额。

对于抓取到的,一般也可以存在文件中,或者直接通过 SQL 存入数据库,视不同情况和个人喜好而定。

Step5 批量抓取

前面的一套做下来,就完整地抓取了一组数据。要达到目的,还要设计一下批量抓取的程序。

一个要解决的问题就是如何获得组合列表。这个可以再通过另一个抓取程序来实现。然后根据这些列表来循环抓取就可以了。

若要细究,还要考虑列表如何保存和使用,如何处理抓取失败和重复抓取,如何控制抓取频率防止被封,可否并行抓取等等。

Step6 数据分析

数据有了,你要怎么用它,这是个很大的问题。可以简单的统计现象,也可以想办法深入分析背后隐藏的逻辑。不多说,我也还只是在摸索之中。

在chrome、firefox等浏览器的控制台,“网络”network 标签下,某个xhr请求的status为cancelled。意思是该xhr请求已经超时(一般xhr超时为30秒到1分30秒)导致请求无响应。

设置本地XHR对象的“名-值”映射。例如,可以在需要时设置“withCredentials”为真而执行跨域名请求。

XHR:XML>

你说的隐藏的div内容,应该是动态加载的数据吧,不在网页源码中显示,只在加载网页时才请求数据进行显示,一般情况下,这种数据都保存在一个json文件中,只要抓包分析出这个json文件的url地址,然后再根据json文件结构进行解析,很快就能获取到动态加载的div数据,下面我以爬取人人贷上面的散标数据为例,简单介绍一下python如何爬取div动态加载的数据,实验环境win10+python36+pycharm50,主要步骤如下:

1首先,打开散标数据,如下,爬取的信息主要包括年利率、借款标题、期限、金额和进度这5个字段信息:

右键对应元素进行检查,可以看出所有的数据嵌套在div标签中,如下:

打开网页源码,我们按Ctrl+F查找对应的数据,会发现所查找的数据都未在网页源码中,如下,即数据都是动态加载,所以直接解析原网页是找不到div嵌套的数据的:

2接着,我们按F12调出开发者工具,依次点击“Network”->“XHR”,F5刷新页面,就会看到动态加载的json文件,查看这个文件,内容如下,左边为json文件的url地址,右边就是我们需要爬取的div数据:

3最后对应上面的json文件,我们就可以直接获取并解析json了,这里主要用到requests和json这2个模块,其中requests用于根据url地址获取json文件,json用于解析json文件,提取出我们所需要的信息,即div动态加载的数据,测试代码如下,非常简单:

运行程序,截图如下,已经成功爬取到div加载的数据:

至此,我们就完成了利用python爬取div动态加载的数据。总的来说,整个过程非常简单,最主要的还是抓包分析,只要你有一定的爬虫基础,熟悉一下上面的代码,多调试几遍程序,很快就能掌握的,当然,你也可以使用selenium进行爬取,直接解析就行,网上也有相关教程和资料可供参考,非常丰富,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

望采纳

一、Ajax原理是什么

AJAX全称(Async Javascript and XML),即异步的JavaScript 和XML

是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页

Ajax的原理简单来说通过Xml>

使用ajax请求本地md文件

注意1,如果是POST请求,要设置请求头,因为xhr ajax默认content-type是text/plain,而一般ajax请求或者表单的content-type是application/x->

以上就是关于如何使用 Python 抓取雪球网页全部的内容,包括:如何使用 Python 抓取雪球网页、来自网页的消息 xhr cancelled是什么意思、jquery ajax xhr 怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9731723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存