京东爬取评论简单分析
1.定义一个获取所有评论的函数
def get_comment(url):
"""
获取评论函数
"""
i = 0
# 获取所有的评论,直到正则匹配为空的时候停止
while True:
url = "http://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv6&productId=11510787177&score=0&sortType=5&page=" + str(i) + "&pageSize=10&isShadowSku=0&fold=1"
headers = {"User-Agent": random.choice(ua), }
response = requests.get(url, headers=headers)
# 评论列表
comment_list = re.compile(r'"content":"(.*?)"').findall(response.text)
for comment in set(comment_list):
# 打印评论
print comment
# 评论终止的条件
if len(comment_list) == 0:
break
i += 1
2.先获得你搜索关键词的url:
#keyword是你搜索的关键词,每类商品基本都是100页,京东page页数是奇数变化
for j in range(101):
url = "https://search.jd.com/Search?keyword=%E7%94%B7%E8%A1%A3&enc=utf-8 &page=" + str(j)
3.根据这个url就可以获得商品列表的前28个数据,一共有60个,另外有四个广告:
res = requests.get(url, headers=headers
# 使用正则提取出商品的id字段
id_list =re.compile('J_AD_(\d+)').findall(res.content)
# print len(id_list)
# 定义一个列表来存放所有的id
str_id = []
for id in id_list:
# 详细页面的url
detail = "http://item.jd.com/"+str(id)+".html"
# 添加id到列表
str_id.append(id)
# 这个是获取评论的url
comment_url = "http://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv6&productId="+str(id)+"&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"
# 调用获取评论的函数
get_comment(comment_url)
# 拼接id
str_id = ",".join(str_id)
4.另外的28条数据是动态加载的,鼠标下载的时候会加载出来,加载这个是要根据前面页面的id信息和翻页信息,
# 这是加载出来的url,其中后面的str_id是前面获取所有的id的拼接在一起,用,隔开
url2= "https://search.jd.com/s_new.php?keyword=%E7%94%B7%E8%A1%A3&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E7%94%B7%E8%A1%A3&page="+str(j+1)+"&s=25&scrolling=y&log_id=1504059001.28625&tpl=3_L&show_items=" + str_id
# 这个是拼接请求的头,分析得到这个Referer字段
headers_page = "https://search.jd.com/Search?keyword=%E7%94%B7%E8%A1%A3&enc=utf-8&page="+str(j)+"&s=1"
# 其中请求头要添加 Referer字段,上一页的关联地址,头的page是请求主页的page
headers_next = {"User-Agent": random.choice(ua),
"Referer": headers_page}
# 获取后面的数据
url2= "https://search.jd.com/s_new.php?keyword=%E7%94%B7%E8%A1%A3&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E7%94%B7%E8%A1%A3&page="+str(j+1)+"&s=25&scrolling=y&log_id=1504059001.28625&tpl=3_L&show_items=" + str_id
headers_page = "https://search.jd.com/Search?keyword=%E7%94%B7%E8%A1%A3&enc=utf-8&page="+str(j)+"&s=1"
# 其中请求头要添加 Referer字段,上一页的关联地址
headers_next = {"User-Agent": random.choice(ua),
"Referer": headers_page}
# 发送请求
res1 = requests.get(url2, headers=headers_next)
# 使用正则得到id的列表
id_list2 = re.compile('J_AD_(\d+)').findall(res1.content)
for id2 in id_list2:
# 详细页面的url,
detail_url = "http://item.jd.com/"+str(id2)+".html"
# 评论的url
comment_url = "http://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv6&productId="+str(id2)+"&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"
# 调用评论函数
get_comment(comment_url)