如果同学们对爬虫不是很了解的话,可以先看下爬虫的定义、原理。在这里我给大家推荐一篇文章:
https://www.cnblogs.com/sss4/p/7809821.html
首先,我们拿一件商品的链接来作为例子(这是一个2080ti的链接,博主已经沉浸在暴富的粪坑里了)
https://item.jd.com/8797490.html#crumb-wrap
PS:由于京东的网址是动态的,所以那些headers之类的东西,要根据你自己的网址查找
用火狐或谷歌打开此链接(我用的是谷歌),然后点击右键——检查(或者按F12)
进去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
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的话,可以给我留言哦,我看到的话,会回复的嘻嘻!