python爬虫东方数据爬取

网页原文出处:http://blog.csdn.net/binosun/article/details/78697332

0.背景

由于工作需要,最近在研究如何从东方财富网页爬取股东增持数据。 
网页:http://data.eastmoney.com/executive/gdzjc-jzc.html

1.分析网页请求

打开网页,选择某数据右键查看元素,可以查看该数据在加载后的网页中的位置。 
这里写图片描述
F12打开开发者工具,打开网页查看页面请求,可以发现网页发送了多个请求,请求到的文件包括html、css、js、png等,如下图所示。 
这里写图片描述
网页主框架通过html请求加载,数据不在其中。数据是通过js单独加载的。

2.方案介绍 
【方案一】 
BeautifulSoup解析网页文件。 
将网页保存在本地,python读取后用BeautifulSoup解析获得页面数据。 
【方案二】 
selenium、PhantomJS、BeautifulSoup组合,通过模拟浏览器打开对应网页后用BeautifulSoup进行解析。

    from selenium import webdriver
    driver = webdriver.PhantomJS()
    jzc_html = "http://datainterface3.eastmoney.com/EM_DataCenter_V3/api/GDZC/GetGDZC?tkn=eastmoney&cfg=gdzc&secucode=&fx=1&sharehdname=&pageSize=50&pageNum=1&sortFields=BDJZ&sortDirec=1&startDate=2017-11-29&endDate=2017-11-30"
    driver.get(jzc_html)
    web_soup = BeautifulSoup(driver.page_source, "lxml")
    print web_soup.prettify()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

【方案三】 
前两种方案对于获取当前页面数据还算比较有效,但对第二页数据的获取则束手无策。点击第二页发现网页只发送了一个请求数据的request,这就是数据接口啊。

http://data.eastmoney.com/DataCenter_V3/gdzjc.ashx?pagesize=50&page=2&js=var iTHPTzxw&param=&sortRule=-1&sortType=BDJZ&tabid=jzc&code=&name=&rt=50406968
  • 1

用浏览器请求该网页,发现返回值中包含了请求的数据和真实的数据接口。

"url":"http://datainterface3.eastmoney.com/EM_DataCenter_V3/api/GDZC/GetGDZC?tkn=eastmoney&cfg=gdzc&secucode=&fx=1&sharehdname=&pageSize=50&pageNum=2&sortFields=BDJZ&sortDirec=1&startDate=&endDate="
  • 1

用浏览器请求该接口,正是我们需要的数据,用|分割。pageSize=50表每页50条数据,pageNum=2表示当前请求的是第二页。其他字段容易理解。 
既然找到了数据接口,那就可以用urllib来请求,将响应的数据解析为json格式。

import urllib2
jzc_html = "http://datainterface3.eastmoney.com/EM_DataCenter_V3/api/GDZC/GetGDZC?" \
               "tkn=eastmoney&cfg=gdzc&secucode=&sharehdname=&pageSize=200&pageNum=1&sortFields=NOTICEDATE&sortDirec=1" \
               "&fx=2"\
               "&startDate="+start_data+"&endDate="+end_data
request = urllib2.Request(jzc_html)
response = urllib2.urlopen(request)
body = json.loads(response.read())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

尽情的设置参数调戏接口吧,233



猜你喜欢

转载自blog.csdn.net/github_38595636/article/details/79330134