python 爬取苏宁易购商品信息和评论的详细流程

本文详细介绍了使用Python爬取苏宁易购商品信息和评论的步骤,包括解析动态加载的URL,主页面翻页逻辑,以及如何获取商品价格、评论统计数据和评论内容。虽然存在JavaScript动态加载的挑战,但通过分析和构造URL,可以有效抓取所需数据。文中还给出了完整代码示例。
摘要由CSDN通过智能技术生成

总体说明

爬取苏宁易购的最大难点就在于他这个页面是很多js动态加载的内容,寻找和构造链接比较麻烦,如果不用JS逆向工程。采用selenium等爬取的效率相对会比较差一点,下面我会先放上我找的js动态加载的url图片,然后重点说明一下这些url的构造,最后附上代码,希望对您能有帮助,不足之处希望多提意见。谢谢!

主页面翻页url构造

a = urllib.parse.quote("华为手机")
for i in range(50):
    print("第%s页" % i)
    url = "https://search.suning.com/"+a+"/&iy=0&isNoResult=0&cp=" + str(i)
    html = self.get_html(url)
    self.get_phone_data(html)

在这里插入图片描述
点击下一页的时候寻找下一页的link,然后定位翻页的参数位置

详情页面数据获取

这边需要的数据是详情页面中的手机的价格,手机的评论统计,买家的回复内容

获取手机价格的url构造

#获取手机的价格 手机价格的连接需要自己拼凑
    def get_price_html(self, goods_src):
        try:
            src_args = re.findall(r"com/(.*?).html", goods_src)[0]
            key0 = src_args.split("/")[0]
            key1 = src_args.split("/")[-1]
            price_src = "https://pas.suning.com/nspcsale_0_0000000" + key1 + "_0000000" + key1 + "_" + key0 + "_250_029_0290199_20089_1000257_9254_12006_Z001___R1901001_0.5_0___000060864___.html?callback=pcData&_=1581050220963"
            html = self.get_html(price_src)
            price = re.compile(r'"netPrice":"(.*?)"', re.S)
            price_ret = price.findall(html)
            return price_ret[0]
        except:
            return -1

在这里插入图片描述

获取手机评论的统计数据的url

#获取评论的总的数量
    def get_comment_num(self, clsid, goods_src):
        src_args = re.findall(r"com/(.*?).html", goods_src)[0]
        key1 = src_args.split("/")[-1]
        if clsid:
            url = "https://review.suning.com/ajax/review_count/cluster-"+str(clsid)+\
              "-0000000"+str(key1)+"-0000000000-----satisfy.htm?callback=satisfy"
        else:
            url = "http://review.suning.com/ajax/review_count/general--0000000"+str(key1)+"-0000000000-----satisfy.htm?callback=satisfy"
        html = self.get_html(url)
        # print(html)
        oneStarCount = re.findall(r'"oneStarCount":(.*?),', html)[0]
        twoStarCount = re.findall(r'"twoStarCount":(.*?),', html)[0]
        threeStarCount = re.findall(r'"fourStarCount":(.*?),', html)[0]
        fourStarCount = re.findall(r'"threeStarCount":(.*?),', html)[0]
        fiveStarCount = re.findall(r'"fiveStarCount":(.*?),', html)[0]
        picFlagCount = re.findall(r'"picFlagCount":(.*?),', html)[0]
        totalCount = re.findall(r
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值