爬虫——爬取京东评价

爬京东商品的评价

如果同学们对爬虫不是很了解的话,可以先看下爬虫的定义、原理。在这里我给大家推荐一篇文章:
  https://www.cnblogs.com/sss4/p/7809821.html


首先,我们拿一件商品的链接来作为例子这是一个2080ti的链接,博主已经沉浸在暴富的粪坑里了
https://item.jd.com/8797490.html#crumb-wrap

PS:由于京东的网址是动态的,所以那些headers之类的东西,要根据你自己的网址查找

用火狐或谷歌打开此链接(我用的是谷歌),然后点击右键——检查(或者按F12)

我们要找到评价的json文件
进去Network后,刷新一下,再点击评价,接着就按图片的指示进行。(productPageComments.action?callback=)
在这里插入图片描述
再返回来找到这个Headers
在这里插入图片描述

多说无用,上代码

第一步,获取内容

import requests,json
#url是Headers里的Requests URL
url="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv375&productId=8797490&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"
//headers的内容在Headers里面都可以找到
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
        'Request Method':'Get',
         'callback':'fetchJSON_comment98vv375'
        }
req=requests.get(url ,timeout=30,headers=headers)
req.text

运行结果:
在这里插入图片描述

第二步,解析内容

//先把不用的内容去掉,再用json库解析它,得到我们想要的东西
jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
//通过type(),我们可知jd是一个字典
print(type(jd))
jd

运行结果:
在这里插入图片描述

第三步,通过key来找到所有的评论

jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
print(jd['comments'])

运行结果:
在这里插入图片描述
由图可知,key为 conent 的内容就是我们想要的评价了

第四步,遍历输出每一条评价

j=1
for i in jd['comments']:
    print(str(j)+"、"+i['content'])
    j+=1

运行结果:
在这里插入图片描述

接下来,就是整合代码了

import requests,json
url="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv375&productId=8797490&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
        'Request Method':'Get',
         'callback':'fetchJSON_comment98vv375'
        }
# 获取网页信息
req=requests.get(url ,timeout=30,headers=headers)
# req.text
#先把不用的内容去掉,再用json库解析它,得到我们想要的东西
jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
j=1
#遍历出每条评价
for i in jd['comments']:
    print(str(j)+"、"+i['content'])
    j+=1

运行成功的小伙伴可能会发现,我们爬出来的评价为什么只有这么几条呢?其实,京东的评价,它每一页只有这么几条。那么,如果我们想要爬取所有的评价,应该怎么做呢?很简单,只要循环的执行以上的代码,就可以了。

我们只需改动以上的代码,就可以实现我们想要的功能了。(话不多说,上代码)
通过观察,我们可知url是通过page这个参数来控制页数的,所以我们找到这个地方,就可以实现翻页功能
后来我加上了词云分析评价的功能(刚学的,挺好玩的)

import requests,json
#下面的库是用来做词云的
#import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS
from PIL import Image
j=1
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
            'Request Method':'Get',
             'callback':'fetchJSON_comment98vv375'
         		}
#存放评价
content=[]
def f(url):
    # 获取网页信息
    req=requests.get(url ,timeout=30,headers=headers)
    # req.text
    #先把不用的内容去掉,再用json库解析它,得到我们想要的东西
    jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
    #global:声明变量的作用域为全局作用域
    global j
    for i in jd['comments']:
        content.append(i['content'])
#这里我们只爬10页做个例子
for i in range(10):
    url="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv375&productId=8797490&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1".format(i)
    f(url)
#print(content) 
#====================
#这部分可以去掉的
content=''.join(content)
# bg_img=np.array(Image.open("../picture/1.png"))
wordcloud=WordCloud(font_path="c:/Windows/Fonts/simkai.ttf",stopwords=STOPWORDS).generate(content)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

运行结果:
在这里插入图片描述
注意:如果爬太多页的话,就会报错(应该是被发现我们是爬虫了)。以我目前的水平,还不知道怎么解决,呜呜!)。

好啦,本次的笔记就到这里了,如果有疑惑或者会解决我最后的小bug的话,可以给我留言哦,我看到的话,会回复的嘻嘻!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值