爬虫项目中涉及Json数据的处理

在执行爬虫项目的过程中,有时返回的不是一个html页面而是json格式数据,此时对数据的解析非常重要。

比如京东的评论数据、淘宝的评论数据、人人贷的数据(https://www.we.com/lend/loanList!json.action?pageIndex=3)。

(一).Json格式数据的爬取

采用Python爬取数据可以采用Scrapy或者采用urllib,requests等两种方法,显然在这里采用第二种方式更为简单。

步骤如下:

1、由于有分页的情况,因此首先构造带分页的url地址。

urlbase ="https://www.we.com/lend/loanList!json.action?pageIndex="

urlList = []

#拼接要爬取的地址

for in range(1,52):

     url= urlbase +str(i)+"&_=1489560949549"urlList.append( url )

#循环抓取列表页信息

2、采用request对以上的url进行爬取

import  requests

content=requests.get(url,headers=headers).content

在爬取的过程中,考虑到需要模拟真实的用户,因此需要添加cookie或者header参数。

(二).对爬取的json格式数据的解析

至此,数据已经爬取下来,存放在contend里面,但是如何提出里面的关键数据非常重要。

为了能在浏览器中方便的浏览Json格式的数据,建议在chrome中添加一个扩展程序JSONView,使得其Json格式的数据能够结构化的显示。比如人人贷的数据显示如下。


对于这个数据的解析有两种方式

1、采用正则表达式解析

比如我们要获取“amount”的内容,可以采用以下方式获取:

importre

##使用正则提取amount字段amount = re.findall(r'"amount":(.*?),', content)

其中content是爬取下来内容。

2、基于json格式进行获取

实际上json的数据格式与python的dict是有极大的类似之处。在python的importjson这个包里面提供了两个经典的预处理方法:

import json

dict_ = {1:2, 3:4,"55":"66"}

# test json.dumps

print type(dict_), dict_

json_str =json.dumps(dict_)

print "json.dumps(dict) return:"

print type(json_str), json_str

# test json.loads

print "\njson.loads(str) return"

dict_2 =json.loads(json_str)

print type(dict_2), dict_2

输出为:

程序结果:

{'55': '66', 1: 2, 3: 4}

json.dump(dict) return:

{"55": "66", "1": 2,"3": 4}

json.loads(str) return

{u'55': u'66', u'1': 2, u'3': 4}

从上面的样例可以看出两个经典的方法dumps和loads的作用分别为:

json.dumps

:ptyhondict转成str

json.loads:str转成pythondict类型

有了以上的基础知识后,对于人人贷的数据可以直接采用如下方式处理:

for url in urlList:

    //获取内容

   content=requests.get(url,headers=headers).content

   //采用json.loads方法将str转换为dict类型

   con=json.loads(content)#获取都到评论列表,因为之前还有很多的其他东西,这些是不需要的

   //直接采用python中dict的数据获取方法,取得loans列表,然后直接取得各个数据。

   commentList= con["data"]["loans"]

   for   item in  commentList:

       loanId= item['loanId']

      title= item['title']

      amount= item['amount']

      interest= item['interest'

      months= item['months']

备注:

采用第二种方式的时候要注意,返回的数据是不是标准的json格式的数据,如果不是标准的json格式数据,那么可能需要额外处理一下。比如京东商品的评论数据,

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv52063&productId=3133859&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0

这是Apple iPhone 7 Plus (A1661) 128G亮黑色移动联通电信4G手机的评论数据。

直接打开上面的链接后就会发现在jsonview下面并不是正规的json格式数据显示,那么对于这种数据类型,可以采用正则表达式的方式来获取,当然也还是可以采用json转换为dict方式来处理。

仔细分析爬下来的数据:

原始页面:

我们要爬取的是用户评论数据,而爬取下来的content并不是标准的json格式数据,怎么办,如上图给出的提示,爬取下来的contend是把数据放到fetchJSON_comment98vv52063()里面了,而括号里面的数据则是标准的json格式数据。

因此对于此类的数据,首先要正则表达是提出括号里面的数据,然后再用loads方法转换为python的dict类型数据进行处理就可以了。

源码如下:

#爬取

for url  in  urlList:

      cont=requests.get(url,headers=headers,cookies=cookie).content

#这点非常重要,这里的正则表达式是取以数字或者字母开头,后面紧跟()中的内容   rex=re.compile(r'\w+[(]{1}(.*)[)]{1}')

   content=rex.findall(cont)[0]#取出括号中的东西,这是一个标准的json格式数据

    con=json.loads(content,"gbk")

#获取都到评论列表,因为之前还有很多的其他东西,这些是不需要的

    commentList= con['comments']

    for  item  in  commentList:

         id= item['id'

        content= item['content'].strip()

       referenceName= item['referenceName']

       productColor= item['productColor']

一个技巧:可以先尝试提出()内的数据到一些在线的json解析网站(http://www.bejson.com/)去看看json数据的排列格式,这样就更加清楚该怎么提取数据了。

(三)参考文献:

1、使用python抓取并分析数据—人人贷(urllib)

:http://bluewhale.cc/2016-12-11/use-python-crawl-and-analysis-data-renrendai-urllib-html.html#ixzz4dKuFHIgb

2 http://blog.csdn.net/yan_xing_an/article/details/46892105

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容