爬取京东iphone8的异步加载评论看看为啥这么多人买
作者:王大伟
Python爱好者社区唯一小编
博客:https://ask.hellobi.com/blog/wangdawei
前言
好久没写爬虫类的文章了,时间长了,生疏了
本想搞个大新闻
然后忙了一天没怎么有空坐在电脑前
就放弃了
不过!
还是可以搞个小新闻的
看过我文章的人都知道
我写文章很浅显易懂
喜欢从零开始一步步玩
虽然技术不如各种大V
虽然我名字透露着我可能是个隐藏的大V
不过尽量让不懂的人看懂文章并且能实现
以前尝试爬取京东商品信息
那个时候
我还是个小白
哦
抱歉
现在还是
不过
今天我尝试着发现了京东商品评论信息的爬取方式
并且一步步实践出来了...
每次Iphone出新的机型,总能在网上引起轩然巨浪
所以,我就拿前段时间火热的Iphone8下手了
划重点:今天我不加表情包,一鼓作气写完!!!
运行环境
Python 3.X
寻找评论信息地址
我们打开京东商城,搜索iphone8
iphone8虽然买不起,但是看看也欢迎
我们点击进去查看详情
往下翻,找到商品评价,点击
不仅有评论,而且还有追评,一般追评比较可信(毕竟好不好,用过了才知道!)
我们翻到最后,注意一下网址(url)
然后我们点击第二页
再点击第三页
发现第二页和第三页的网址是一样的,我们可以推测,访问第一页评论的网址也可以和2,3一样
我们再次点击第一页
发现确实如此
对于这种网站要爬取信息是比较难的(评论翻页,但是网址不变)
可能评论信息是异步加载,需要抓包找到位置
我们先查看源代码
复制一段评论信息
在源代码中查找
我们可以查找到本页的评论
我们翻到第二页,查看源代码,发现评论信息还是第一页的信息
想想,网址没变,所以内容不变很正常,但是评论信息明明改变了啊
我们按下F12,进入浏览器的开发者模式(我用的是谷歌浏览器)
我们点击刷新网页,然后如下图红框所示将保存日志信息勾选上
可以看到左下角加载了很多内容
有图片,js,html
根据我今天的经验
我们将All切换到JS,之后点击禁止符号,意思是clear清除原有信息
此时,下面便是一片空白
我们点击评论第二页
发现JS中出现了一个内容
我们点击第三页
发现又多出现一个内容
我们点开第一个出现的
在Preview中发现了评论的内容
那怎么找到这个JS文件的网址呢?
很简单,我们从Preview切换到Headers
将这里的请求网址复制,在浏览器打开
此时,我们可以看到评论信息
我们将之前出现的两个JS文件的Headers里的url都复制到word中
通过对比发现,他们几乎一样,除了page的参数
此时我们一大难题已经解决
找到了异步加载评论的url
并且找到了网址变化规律
先爬取一页试试水
做事情不要急功近利
慢慢来
男人不能快
我们复制第一页的url打开
这应该是个json文件,可以用其特殊方法提取信息
不过,作为爬虫小白
我还是喜欢正则表达式
简单粗暴
我们查找发现,每条评论前面都是 "content":"
而评论信息以 ","creationTime" 结尾 或者更简单 以 "," 结尾也是ok
我们开始写爬虫
导入必要的模块
import re
import pandas as pd
import requests
使用requests请求访问网址
response = requests.get("https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4962&productId=5089225&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1")
response = response.text
print(response)
我们看到以下信息:
我们使用正则将所有信息提取出来,并且打印
pat = '"content":"(.*?)","'
res = re.findall(pat,response)
for i in res:
print(i)
其实,以上评论每条都是重复一次的,追评只有一个,至于原因,时间太短没法考究
我们继续,查看一下res的类型
type(res)
显示结果是个list
res
在查看res内容时候,发现有 \\n
作为一个爬虫小白&数据分析小白,也是懂得要简单的数据清洗
我们将 \\n 去除
for i in res:
i = i.replace('\\n','')
print(i)
注意:对列表不能直接使用replace()方法,而是通过循环对其每个元素(字符串)使用
此时每条评论信息就好看多了
爬取多页评论
会爬取一页评论 + 找到了多页规律 = 会爬取多页评论
f = open('f:/comment_iphone8.txt','a')
for i in range(0,720):#720
response = requests.get('https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4962&productId=5089225&score=0&sortType=5&page='+str(i)+'&pageSize=10&isShadowSku=0&rid=0&fold=1')
response = response.text
#print(response)
pat = '"content":"(.*?)","'
res = re.findall(pat,response)
for i in res:
i = i.replace('\\n','')
#print(i)
f.write(i)
f.write('\n')
f.close()
以上代码解释:以追加方式打开(新创建)一个txt文件用于存放评论信息
爬取720页评论信息(这么多页是我试出来的总评论大概页码)
通过page = 的不同,构造url
之后的爬取过程和之前一样
注意在写入一条评论之后,写入一个回车换行
最后关闭txt
在爬取过程中,出现了问题
这种主要是网站发现了爬虫,屏蔽了
可以采用代理ip,模拟浏览器解决
这里都不涉及,我们加一个异常处理
当出现问题,打印出现问题的页码,并且开始下一次循环
f = open('f:/comment_iphone8_.txt','a')
for i in range(0,720):#720
try:
response = requests.get('https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4962&productId=5089225&score=0&sortType=5&page='+str(i)+'&pageSize=10&isShadowSku=0&rid=0&fold=1')
response = response.text
#print(response)
pat = '"content":"(.*?)","'
res = re.findall(pat,response)
for i in res:
i = i.replace('\\n','')
#print(i)
f.write(i)
f.write('\n')
except:
print('爬取第'+str(i)+'页出现问题')
continue
f.close()
结果显示,只有其中两页出了问题
整个爬取过程大概几分钟
因为有双重循环
所以代码的时间复杂度是n^2
打开本地的txt文档
已经可以看到评论保存在本地了
制作评论词云图
导入必要模块
from os import path
from scipy.misc import imread
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
注意,如果没安装 jieba 和 wordcloud 模块请自行安装
我们以苹果的logo作为背景轮廓(保证白色部分不会出现词云)
图名为iphone8_.jpg,图片要放在默认运行文件夹
f = open('f:/comment_iphone8_.txt','r')
text = f.read()
cut_text = ' '.join(jieba.lcut(text))
print(cut_text)
color_mask = imread("iphone8_.jpg")
cloud = WordCloud(
font_path='FZMWFont.ttf', # 字体最好放在与脚本相同的目录下,而且必须设置
background_color='white',
mask=color_mask,
max_words=200,
max_font_size=5000
)
word_cloud = cloud.generate(cut_text)
plt.imshow(word_cloud)
plt.axis('off')
plt.show()
下载方正喵呜体字体
字体可以网上下载,也要放在默认运行文件夹
将以上参数调好
运行,生成了词云图
从词云图可以看出,从 手机不错、好看、喜欢、手感等有实际意义的词 可以看出iphone8还是很受欢迎的(不受欢迎怎么会有这么多评论,汗)
这篇写的很啰嗦,特别是寻找url地址和规律部分
结语
你看懂了么~
写完本文,我只想说一句发自内心的话
这是真情实感不是表情包
阿喂,谁扔的鸡蛋!!!
文章如有不妥指出,望各位大佬留言评论指出。
看小编的Python爬虫文章不够系统?想零基础系统学习Python网络爬虫?
你的机会来啦~小编Python网络爬虫上海站线下班正式开启啦!
扫码上方图片或点击阅读原文图了解课程详情