当前位置:   article > 正文

python爬虫之通过pyquery爬取大众点评评论信息_爬虫大众点评好评数

爬虫大众点评好评数

写作缘由:朋友求助帮忙爬取一下大众点评天河商圈的商户名, 店铺收藏量, 评论数量, 好评数, 差评数, 口味评分, 环境评分,服务评分, 人均价格, 首页优质评论数。
思路

1. 我们发现大众点评是需要我们模拟浏览器向服务器发起请求,比如我们设置了头信息中的Cookie等头信息,这样服务器就会以为我们是通过浏览器登录账户进行访问的,不会把我们列入机器人爬虫,所以需要headers请求头。
 

  1. headers = {
  2. 'Host': 'www.dianping.com',
  3. 'User-Agent':"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36",
  4. 'Accept-Encoding': 'gzip',
  5. 'Cookie' : 'xxxxxx'#xxxxxx为电脑中自己登陆时的cookie值
  6. }

2. 根据天河商圈的URL:http://www.dianping.com/guangzhou/ch10/r22p%s,我们发现,天河商圈大概有50个页面,我们只需要遍历50次,修改URL中末尾处的%s从1到51即可。


3. 根据页面显示的源代码,我们可以根据css的定位获取到每个页面的中每个商铺的ID,根据ID,我们可以利用URL:http://www.dianping.com/shop/%s/review_all,修改URL中%s为商户的ID。


即解析的代码块为:

  1. # 解析id
  2. shangId1 = doc("div.content > div.shop-list.J_shop-list.shop-all-list > ul > li").items()
  3. for data in shangId1:
  4. shopId = data("div.txt >div.tit > a").attr("data-shopid")
  5. listShop.append(shopId)


4. 根据单个商铺的页面显示的源代码,我们可以根据css的定位获取到商户名,评论数量,好评数, 差评数, 星级, 口味评分, 环境评分,服务评分, 人均价格以及所有评论信息。我们发现解析的数据比如:好评数:(1250),这里面包含了一些与之无关的字符,我们可以通过正则表达式将数字部分匹配出来。


即解析的代码块为:

  1. # 商户名
  2. shopName = doc1("div.review-list-header > h1 > a").text()
  3. print("商户名:" + shopName)
  4. # 评论数量
  5. #re.sub("\D", "", reviewsSum):正则表达式将获取到的数据reviewsSum将匹配数字部分提取出来
  6. reviewsSum = doc1("div.rank-info > span.reviews").text()
  7. reviewsSum = re.sub("\D", "", reviewsSum)
  8. print("评论数量:" + reviewsSum)
  9. # 好评数
  10. goodSum = doc1("div.filters > label.filter-item.filter-good > span.count").text()
  11. goodSum = re.sub("\D", "", goodSum)
  12. print("好评数:" + goodSum)
  13. # 差评数
  14. badSum = doc1("div.filters > label.filter-item.filter-bad > span.count").text()
  15. badSum = re.sub("\D", "", badSum)
  16. print("差评数:" + badSum)
  17. # 口味评分
  18. kwSum = doc1("div.rank-info > span.score :first-child").text()
  19. print("口味评分:" + kwSum[3:])
  20. # 环境评分
  21. hjSum = doc1("div.rank-info > span.score :nth-child(2)").text()
  22. print("环境评分:" + hjSum[3:])
  23. # 服务评分
  24. fwSum = doc1("div.rank-info > span.score :last-child").text()
  25. print("服务评分:" + fwSum[3:])
  26. # 人均价格
  27. priceSum = doc1("div.rank-info > span.price").text()
  28. priceSum = re.sub("\D", "", priceSum)
  29. print("人均价格:" + priceSum)

5. 根据要求:3张图片+150个文字以上算优质评论,我们解析了评论,用了上述的定位方法,并且我们发现解析的评论中带有"收起评论"、" "、"\n",我们通通将其转换成"",再计算评论的长度。

  1. # 解析评论
  2. pinglunLi = doc1("div.reviews-items > ul > li").items()
  3. for data in pinglunLi:
  4. # 首页每个评论长度
  5. pinglunShop = len(data("div > div.review-words").text().replace("收起评论", "").replace(" ", "").replace("\n", ""))
  6. print("首页每个评论长度" + str(pinglunShop))
  7. # 首页每个图片个数
  8. imgShop = data("div > div.review-pictures > ul > li> a").items()
  9. imgList = 0
  10. for key in imgShop:
  11. imgList = imgList + 1
  12. print("首页每个图片个数" + str(imgList))
  13. # 3张图片+150个文字以上算优质评论
  14. if pinglunShop >= 150 and imgList > 3:
  15. goodReviews = goodReviews + 1

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/368323
推荐阅读
相关标签
  

闽ICP备14008679号