楼主: wqf_cufe
8293 10

[有偿编程] 200论坛币求助如何用R或者Python抓取同花顺网页数据 [推广有奖]

  • 4关注
  • 16粉丝

已卖:4079份资源

教授

89%

还不是VIP/贵宾

-

威望
0
论坛币
4283 个
通用积分
6.5000
学术水平
10 点
热心指数
17 点
信用等级
13 点
经验
565 点
帖子
730
精华
0
在线时间
2236 小时
注册时间
2009-5-26
最后登录
2021-12-29

楼主
wqf_cufe 发表于 2014-11-4 11:21:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想抓取部分的同花顺网页公开数据做一下数据挖掘方面的编程学习。但无奈同花顺上面的数据处理得很符合商业化要求,但却难以一次性全部获取。

我想请教高人能否用R或者Python来抓取下面这个同花顺网页的数据。这个数据有大概43页,最痛苦的地方还有在抓取时还要考虑将最右边的展开项中的股票也录入表中。最好将这43页的数据存在同一张EXCEL中, 并以CSV保存。

下面是该数据表格的网页截图。网址在下方:

360桌面截图20141103222051.jpg

http://data.10jqka.com.cn/market/longhu/yyb/
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:200论坛币 python 0论坛币 同花顺 论坛币 编程学习 同花顺 如何 网页

回帖推荐

马甲1号 发表于4楼  查看完整内容

原来你要的是后面那个。。。那个其实都是些json,用循环搞不难。另外这个版本我在ubuntu上跑的,编码utf-8,乱码的话可能需要转码。
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
accumulation + 100 + 1 + 1 + 1 精彩帖子

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

沙发
马甲1号 发表于 2014-11-4 16:41:01
给你个python的, 有问题问我. 环境是windows上的sypder(python2.7), 需要pandas包,.
运行结果: dataout.zip (2.43 KB) 本附件包括:
  • dataout.csv
  1. import urllib2, pandas, bs4
  2. baseurl='http://data.10jqka.com.cn/market/longhu/yyb/stocknum/desc/'

  3. def getdata(pgnum):
  4.     cururl = baseurl+str(pgnum)
  5.     cn=urllib2.urlopen(cururl)
  6.     rawtxt='\n'.join(cn.readlines())
  7.     return pandas.read_html(rawtxt)[0]
  8.    

  9. dataout=getdata(1).append(getdata(2))
  10. dataout.to_csv('dataout.csv')
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
ryoeng + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

藤椅
wqf_cufe 发表于 2014-11-4 22:46:39
马甲1号 发表于 2014-11-4 16:41
给你个python的, 有问题问我. 环境是windows上的sypder(python2.7), 需要pandas包,.
运行结果:
谢谢,辛苦啦,但是您这个只有第一页的数据。我想要的是当月那个选项里面的43页的数全部数据。

板凳
马甲1号 发表于 2014-11-4 23:31:32
原来你要的是后面那个。。。那个其实都是些json,用循环搞不难。另外这个版本我在ubuntu上跑的,编码utf-8,乱码的话可能需要转码。
dataout.csv.zip (69.35 KB) 本附件包括:
  • dataout.csv
wqf_cufe 发表于 2014-11-4 22:46
谢谢,辛苦啦,但是您这个只有第一页的数据。我想要的是当月那个选项里面的43页的数全部数据。
  1. import urllib2, pandas,json

  2. baseurl="http://data.10jqka.com.cn/interface/market/longhuyyb/stocknum/desc/%s/20/"
  3. def getdata(pgnum):
  4.     cururl = baseurl % str(pgnum)
  5.     ##print cururl
  6.     cn=urllib2.urlopen(cururl)
  7.     jstbl=json.load(cn,encoding='gbk')['data']
  8.     return pandas.read_html('<table>'+jstbl+'</table>')[0]
  9.    
  10. dataout=pandas.DataFrame()
  11. for pgnum in range(43):
  12.     print pgnum
  13.     totaltry=0
  14.     while True:
  15.         try:
  16.             curdata=getdata(pgnum+1)
  17.             curdata['pgnum']=pgnum+1
  18.             break
  19.         except:
  20.             totaltry+=1
  21.             print 'failed: %s' % totaltry
  22.     dataout=dataout.append(curdata, ignore_index=True)

  23. dataout.to_csv('/home/xavier/dataout.csv')
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
ryoeng + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

报纸
wqf_cufe 发表于 2014-11-4 23:55:52
马甲1号 发表于 2014-11-4 23:31
原来你要的是后面那个。。。那个其实都是些json,用循环搞不难。另外这个版本我在ubuntu上跑的,编码utf-8, ...
我刚才跑了你的程序一遍,出现了2个疑问。第一个是出现了2个failed,第二个是我改写你的写出路径,但是出错了,我想存到desktop上面。如下:

0
failed: 1

....

18
failed: 1

...



读出错误:
Traceback (most recent call last):
  File "/Users/johnhenry/Desktop/new program2.py", line 25, in <module>
    dataout.to_csv('/Users/johnhenry/Desktop/dataout.csv')
  File "/Library/Python/2.7/site-packages/pandas-0.13.1_213_gc174c3d-py2.7-macosx-10.9-intel.egg/pandas/core/frame.py", line 1145, in to_csv
    formatter.save()
  File "/Library/Python/2.7/site-packages/pandas-0.13.1_213_gc174c3d-py2.7-macosx-10.9-intel.egg/pandas/core/format.py", line 1177, in save
    self._save()
  File "/Library/Python/2.7/site-packages/pandas-0.13.1_213_gc174c3d-py2.7-macosx-10.9-intel.egg/pandas/core/format.py", line 1269, in _save
    self._save_header()
  File "/Library/Python/2.7/site-packages/pandas-0.13.1_213_gc174c3d-py2.7-macosx-10.9-intel.egg/pandas/core/format.py", line 1265, in _save_header
    writer.writerow(encoded_labels)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

地板
马甲1号 发表于 2014-11-5 09:49:36
wqf_cufe 发表于 2014-11-4 23:55
我刚才跑了你的程序一遍,出现了2个疑问。第一个是出现了2个failed,第二个是我改写你的写出路径,但是出 ...
failed是我做的一个异常处理...放心, 数据不会少的, 但是某些时候提取一页的数据会报错. 一报错我就反复重试, 直到取到数据为止.
桌面那个貌似是解码错误什么的. 你是用什么平台? dataout.zip (67.74 KB) 本附件包括:
  • dataout.csv
我早上用windows上的python重新跑了一下, 现在应该编码是gbk了.
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
wqf_cufe + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

7
pohys 在职认证  发表于 2014-12-31 23:37:02
这个很容易抓取的们,可以联系我QQ1453724998,我告诉你思路

8
☆Justforyou 发表于 2015-8-10 18:17:21
#!/usr/bin/env python
import lxml
import html5lib
import pandas as pd
import time
urllist = []
page_start = 0
page_stop = 43
for page in range(page_start, page_stop):
    page += 1
    time.sleep(1)
    url = 'http://data.10jqka.com.cn/market/longhu/yyb/stocknum/desc/%s/20' % page
    urllist.append(url)

framelist = [ pd.read_html(newurl)[0] for newurl in urllist ]
myframe =pd.concat(framelist, ignore_index=True)
myframe.to_csv('myframe.csv')

9
jjxm20060807 发表于 2015-8-10 20:33:13
谢谢分享

10
bebigstupid 发表于 2016-7-24 09:02:47
谢谢分享

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 00:15