全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
8190 10
2015-02-22
悬赏 100 个论坛币 已解决
最近想研究一下活跃营业部的历史数据,希望从同花顺网页上抓取一下过去一年也就是2014年前十大活跃营业部总共买了哪些股票。希望抓取的10个营业部名称和网页如下:

由于只是网址最后面的代码不同,这里这给了两个营业部的网址,其余可以从同花顺上面搜到。
360桌面截图20150222095415.jpg

网址1:http://data.10jqka.com.cn/market/yybzjsl/CTZQGFYXGSWLDHBLZQYYB
[size=13.63636302948px]网址2:http://data.10jqka.com.cn/market/yybzjsl/HTZQGFYXGSCDSJLZQYYB

需要抓取的数据为

上榜日期,

股票简称,

成交性质,

营业部


成交额占比,

所属板块

360桌面截图20150222095826.jpg

希望能够抓取全部的数据,比如网址1和网址2中的数据共有43页和86页。用R或者PYTHON都可以。请附上全部代码。谢谢!!!
360桌面截图20150222095826.jpg

原图尺寸 689.29 KB

360桌面截图20150222095826.jpg

最佳答案

harpbreeze 查看完整内容

分析了一下楼主给的两个页面,发现其实页面是通过其他链接再加上页码参数,进行Get请求 之后返回json数据再显示在页面上的。 代码以楼主给的两个链接为例,可以用下面的python代码进行数据拉取。 几个参数: pre是各营业部获取数据的连接,page_num是对应营业部数据的页数。 最后保存为csv文件,我自己保存在D盘,楼主可以自己调整。 # -*- coding: utf-8 -*- import urllib2 from bs4 import BeautifulSoup, So ...
二维码

扫码加我 拉你入群

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

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

全部回复
2015-2-22 23:05:55
分析了一下楼主给的两个页面,发现其实页面是通过其他链接再加上页码参数,进行Get请求
之后返回json数据再显示在页面上的。

代码以楼主给的两个链接为例,可以用下面的python代码进行数据拉取。

几个参数:
pre是各营业部获取数据的连接,page_num是对应营业部数据的页数。
最后保存为csv文件,我自己保存在D盘,楼主可以自己调整。


# -*- coding: utf-8 -*-

import urllib2
from bs4 import BeautifulSoup, SoupStrainer
import json
import csv

pre="http://data.10jqka.com.cn/interface/market/yybzjsl/CTZQGFYXGSWLDHBLZQYYB/"
#pre="http://data.10jqka.com.cn/interface/market/yybzjsl/HTZQGFYXGSCDSJLZQYYB/"

data_all=[]
page_num=43
#page_num=86

getonly = SoupStrainer('table')

for id_url in range(1,page_num+1):
    print "Start to get url:"+str(id_url)
    url=pre+str(id_url)
    content = urllib2.urlopen(url).read()  
    obj=json.loads(content)
    datapart = obj["data"]  
    table = BeautifulSoup(datapart, parse_only=getonly)

    for id,row in enumerate(table("tr")):
      if((id_url!=1 and id==0)or(id==1)):continue  
      text = ''.join(row.findAll(text=True))
      data = text.strip()
      data_split = data.split('\n')
      data_all.append(data_split)

cvsfile=open('D:\\eggs.csv', 'wb')
recordwriter=csv.writer(cvsfile,delimiter=',')
for line in data_all:
    temp_list=[]
    for field in line:
        temp_list.append(field.encode('gbk'))   
    recordwriter.writerow(temp_list)

cvsfile.flush()
cvsfile.close()

print "file has been created!"

二维码

扫码加我 拉你入群

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

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

2015-2-23 00:56:46
require(XML)
require(RCurl)

第二步:抓取网页的源代码。
  webpage<-getURL(link)
  webpage <- readLines(tc <- textConnection(webpage)); close(tc)
  pagetree <- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE)

第三步:选表格。
用html语言@限定
  tablehead <- xpathSApply(pagetree, "//table//th", xmlValue) #这里是抓表格的标题
  result<-xpathSApply(pagetree,"//table//td",xmlValue) #这里是表格内容
二维码

扫码加我 拉你入群

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

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

2015-2-23 02:22:35
yishi20000 发表于 2015-2-23 00:56
require(XML)
require(RCurl)
谢谢!能否给出完整的代码呢?
二维码

扫码加我 拉你入群

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

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

2015-2-26 09:48:04
import urllib
from bs4 import BeautifulSoup, SoupStrainer

baseurl="http://data.10jqka.com.cn/market/yybzjsl/HTZQGFYXGSCDSJLZQYYB"
page = urllib.urlopen(baseurl)
getonly = SoupStrainer('table')
table = BeautifulSoup(page, parse_only=getonly)

for row in table("tr"):
  text = ''.join(row.findAll(text=True))
  data = text.strip()
  print data

自己给自己回答一部分吧,但是这里的DATA怎么整成data frame的形式?还有就是这里只能取一页,我想取所有页的数据,请高手指教!谢谢
二维码

扫码加我 拉你入群

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

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

2015-2-26 10:44:32
用rvest也可以很容易拿到一页的数据,不过没有1楼那个选表格,之后处理方便。
同样有问题的是如何才能拿到整几页的数据。研究了网页代码,没看到页码切换部分,貌似用JS还是啥的切换的
同求有心人研究一下下面是尝试拿的一部分代码,包括名字,date,还有原因。用遨游的元素审查看的。
library(rvest)
url<-"http://data.10jqka.com.cn/market/yybzjsl/"
raw<-html(url,encoding="UTF-8")
#get stock
stock_list<-raw %>% html_nodes("tr")
date<-stock_list %>% html_nodes("td.first.tc")
reason<-stock_list %>% html_nodes("td.tl")
stock<-sapply(stock_list,function(n) n[3]$td)
stock


----------
补充:
用以下可以快速得到table (html_table())
d<-raw%>%html_nodes("table.m_table") %>% html_table(fill=TRUE)
d

二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群