本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
目录
- 1. 网站分析
- 2. 示例代码
- 3. 注意事项
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 。
<code><span class="hljs-attribute">https:<span class="hljs-comment">//club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100005492549&score=0&sortType=5&page=0&pageSize=10&isShadowSku=100008348530&fold=1</span></span></code>
www#gaodaima.com来源gao.dai.ma.com搞@代*码网搞代码
从这个 URL 可以看出,page 参数表示页数,从 0 开始,pageSize 参数表示每页获取的评论数,默认是 10,这个参数可以保留默认值,只改变 page 参数即可。
2. 示例代码
根据前面的描述实现抓取苹果手机评论信息的爬虫,通过 fetch_comment_count 变量可以控制抓取的评论条数。最后将抓取的结果显示在控制台中。示例代码如下:
<code><span class="hljs-keyword">import requests <span class="hljs-keyword">import json headers = { <span class="hljs-string">"User-Agent": <span class="hljs-string">"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 = <span class="hljs-number">1000 <span class="hljs-comment"># 限定抓取的评论数 index = <span class="hljs-number">0 <span class="hljs-comment"># 用于记录爬取到第几条评论 page_index = <span class="hljs-number">0 <span class="hljs-comment"># 页码 flag = <span class="hljs-literal">True <span class="hljs-comment"># 用于控制循环是否退出 <span class="hljs-keyword">while flag: url = <span class="hljs-string">"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 += <span class="hljs-number">1 res = requests.get(url=url, headers=headers) text = res.text <span class="hljs-comment"># 下面的代码替换返回数据的部分内容,因为返回的数据并不是标准的 JSON 格式 json_str = text.replace(<span class="hljs-string">"fetchJSON_comment98(", <span class="hljs-string">"")[:<span class="hljs-number">-2] json_obj = json.loads(json_str) <span class="hljs-comment"># 将字符串转换为字典对象 comments_list = json_obj[<span class="hljs-string">"comments"] comments_list_length = len(comments_list) <span class="hljs-comment"># 循环输出评论数据 <span class="hljs-keyword">for i <span class="hljs-keyword">in range(comments_list_length): comments = comments_list[i][<span class="hljs-string">"content"] print(<span class="hljs-string">f"< <span class="hljs-subst">{index + <span class="hljs-number">1} > <span class="hljs-subst">{comments}") creation_time = comments_list[i][<span class="hljs-string">"creationTime"] <span class="hljs-comment"># 获取评论时间 nickname = comments_list[i][<span class="hljs-string">"nickname"] <span class="hljs-comment"># 获取昵称 print(creation_time) print(nickname) print(<span class="hljs-string">"-" * <span class="hljs-number">20) index += <span class="hljs-number">1 <span class="hljs-keyword">if index == fetch_comment_count: flag = <span class="hljs-literal">False <span class="hljs-keyword">break</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
程序运行结果如下图所示:
以下文章来源于Python爬虫数据分析挖掘,作者 Python爬虫数据分析挖掘
转载地址
<code><span class="hljs-attribute">https:<span class="hljs-comment">//www.gaodaima.com/fei347795790?t=1</span></span></code>