1. 网站分析

本文实现的爬虫是抓取京东商城指定苹果手机的评论信息。使用 requests 抓取手机评论 API 信息,然后通过 json 模块的相应 API 将返回的 JSON 格式的字符串转换为 JSON 对象,并提取其中感兴趣的信息。读者可以点击此处打开 京东商城,如下图所示:

URL 是 苹果手机商品 。商品页面如下图所示:

在页面的下方是导航条,读者可以单击导航条上的数字按钮,切换到不同的页面,会发现浏览器地址栏的 URL 并没改变,这种情况一般都是通过另外的通道获取的数据,然后将数据动态显示在页面上。那么如何来寻找这个通道的 URL 呢?

在 Chrome 浏览器的开发者工具的 Network 选项中单击 XHR 按钮,再切换到其他页,并没有发现要找的 API URL,可能京东商城获取数据的方式有些特殊,不是通过 XMLHttpRequest 发送的请求。

所以重新选中 All 按钮,显示所有的 URL。现在用另外一种方式寻找这个 URL,就是 Filter。通过左上角的 Filter 输入框,可以通过关键字搜索 URL,由于本文是抓取评论数据,所以可以尝试输入 comments,在左下角的列表中会出现如下图所示的内容。

在搜索结果中会看到 1个名为 productPageComments.action 的 URL ,单机这个 URL,在右侧切换到 Preview 选项卡,会看到如上图所示的内容,很明显,这是 JSON 格式的数据,展开 comments ,会看到有 10 项 ,这是返回的 10 条评论。在展开某一条评论,如下图所示:

从属性的内容可以看出,content 属性是评论内容,creationTime 是评论时间,days 是购买多长时间后才来评论的。通过 Headers 选项卡可以得到如下完整的 URL 。

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100005492549&score=0&sortType=5&page=0&pageSize=10&isShadowSku=100008348530&fold=1

1

从这个 URL 可以看出,page 参数表示页数,从 0 开始,pageSize 参数表示每页获取的评论数,默认是 10,这个参数可以保留默认值,只改变 page 参数即可。

2. 示例代码 源码地址点这

根据前面的描述实现抓取苹果手机评论信息的爬虫,通过 fetch_comment_count 变量可以控制抓取的评论条数。最后将抓取的结果显示在控制台中。示例代码如下:

# -*- coding: UTF-8 -*-

"""

@author:AmoXiang

@file:4.抓取京东苹果手机评论.py

@time:2020/09/15

"""

import requests

import json

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'

}

fetch_comment_count = 1000 # 限定抓取的评论数

index = 0 # 用于记录爬取到第几条评论

page_index = 0 # 页码

flag = True # 用于控制循环是否退出

while flag:

url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100005492549&score=0&sortType=6&page={}&pageSize=10&isShadowSku=100008348530&rid=0&fold=1'.format(

page_index)

page_index += 1

res = requests.get(url=url, headers=headers)

text = res.text

# 下面的代码替换返回数据的部分内容,因为返回的数据并不是标准的 JSON 格式

json_str = text.replace('fetchJSON_comment98(', '')[:-2]

json_obj = json.loads(json_str) # 将字符串转换为字典对象

comments_list = json_obj['comments']

comments_list_length = len(comments_list)

# 循环输出评论数据

for i in range(comments_list_length):

comments = comments_list[i]['content']

print(f'< {index + 1} > {comments}')

creation_time = comments_list[i]['creationTime'] # 获取评论时间

nickname = comments_list[i]['nickname'] # 获取昵称

print(creation_time)

print(nickname)

print("-" * 20)

index += 1

if index == fetch_comment_count:

flag = False

break

程序运行结果如下图所示:

3. 注意事项京东商城如果频繁使用同一个 IP 发起大量请求,服务端会临时性封锁 IP,可以使用一些免费的代理。

API URL 返回的数据并不是标准的 JSON,里面还有一些杂质,需要在本地将其删除。 本例有一个前缀是 fetchJSON_comment98 ,这个前缀是通过 URL 的 callback 参数指定的,根据参数名应该是个回调函数,具体是什么不需要管,总之,需要按照 callback 参数的值将返回数据的前缀去掉。

这个爬虫是不是感觉很简单!你学会了吗?

此文转载于博主,著作权归作者所有,如有侵权联系小编删除!

python iphone 爬虫_Python爬虫实战之抓取京东苹果手机评价!相关推荐

  1. XHR如何爬虫_Python爬虫实战之抓取京东苹果手机评价

    1. 网站分析 本文实现的爬虫是抓取京东商城指定苹果手机的评论信息.使用 requests 抓取手机评论 API 信息,然后通过 json 模块的相应 API 将返回的 JSON 格式的字符串转换为 ...

  2. 抓取京东苹果手机评价!苹果手机质量还是非常不错的!

    1. 网站分析 本文实现的爬虫是抓取京东商城指定苹果手机的评论信息.使用 requests 抓取手机评论 API 信息,然后通过 json 模块的相应 API 将返回的 JSON 格式的字符串转换为 ...

  3. Python爬虫实战(二):抓取京东苹果手机评价

    目录 1. 网站分析 2. 示例代码 3. 注意事项 1. 网站分析 本文实现的爬虫是抓取京东商城指定苹果手机的评论信息.使用 requests 抓取手机评论 API 信息,然后通过 json 模块的 ...

  4. python爬京东联盟_python爬虫框架scrapy实战之爬取京东商城进阶篇

    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧 ...

  5. 爬虫基础篇之Scrapy抓取京东

    虚拟环境 同一台服务器上不同的项目可能依赖的包不同版本,新版本默认覆盖旧版本,可能导致其他项目无法运行,通过虚拟环境,完全隔离各个项目各个版本的依赖包,实现运行环境互不影响. virtualenv p ...

  6. python爬取网店数据_Python爬虫实现抓取京东店铺信息及下载图片功能示例

    本文实例讲述了Python爬虫实现抓取京东店铺信息及下载图片功能.分享给大家供大家参考,具体如下: 这个是抓取信息的 from bs4 import BeautifulSoup import requ ...

  7. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

    利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...

  8. Python爬虫编程思想(70): 项目实战--抓取京东商城手机销售排行榜

    本文的例子使用requests抓取京东商城手机销售排行榜,并使用pyquery和CSS选择器提取相关的信息,同时将这些信息保存到Excel文件中.本例抓取总排行榜,并单独提取Apple.华为和小米手机 ...

  9. python抓取腾讯视频弹幕_Python实战 | 如何抓取腾讯视频弹幕

    原标题:Python实战 | 如何抓取腾讯视频弹幕 当代年轻人的快乐是网络给的. 如果有人吐槽周末太无聊,他们一定会反驳: 是追剧不香吗? 是吃鸡不好玩吗? 周末辣么短,怎么会无聊呢? 诚然,追剧和游 ...

最新文章

  1. 时间为什么用 12 进制?
  2. 还找不到想要的文章吗?公众号搜索方法大全
  3. VC里的集合类、链表类、映射类
  4. python集合数据对象_python学习第七天 基础数据类型补充 深浅copy 集合 关键字后面加可迭代对象...
  5. ASP.NET Web API的Controller是如何被创建的?
  6. easyui中动态使datebox、combobox为只读状态
  7. 《Adobe After Effects CS5经典教程》——1.5 对合成图像作动画处理
  8. 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
  9. BGP(3):BGP 的路径优选
  10. win10不用密码登录及不显示“要使用本计算机,用户必须输入用户名和密码”的解决办法
  11. Java之美[从蛮荒到撬动地球]之设计模式二
  12. Crust “方舟计划”播报# 3|Crust社区杰出贡献节点——20 位“开拓者”诞生
  13. 修改注册表为当前用户和默认用户添加日文输入法
  14. linux18.04 英文文件夹,在Ubuntu 18.04 LTS中打开文件夹的6种方法
  15. 燕大计算机研究生毕业待遇,研究生人均“月薪上万”是真是假,过来人坦言:想想就好,别认真...
  16. 2念整数(5分) 题目内容: 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si
  17. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Sparsity
  18. 面试题精选:循环队列
  19. CSS3实现实时时间数字滚动
  20. 原创wallpaper Engine冷高轮时间电脑动态时钟壁纸 动态小人人体形状造型数字 动态手势数字 动态麻将数字 动态扑克数字 动态时钟壁纸

热门文章

  1. 【渝粤题库】陕西师范大学210013综合艺术 作业(高起专)
  2. ICDE2020论文简析:空间众包实时交叉在线匹配 - Real Time Cross Online Matching in Spatial Crowdsourcing
  3. LOL提示,部分游戏玩家可能遇到无法进入游戏的问题,驱动人生8解决方案
  4. Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory)
  5. 又想起Solaris
  6. Vue使用PrintJS实现页面打印功能
  7. 如何使用WORD里的添加尾注写论文中的参考文献?
  8. 师傅离开后的这一个月
  9. Jupyterhub嵌入Superset之Jupyterhub配置
  10. 秋日园博园之三-北京魅力