Python爬虫采集京东商品评价

本文分享了如何使用Python爬虫抓取京东商品的评价信息,详细介绍了从查找评论链接、发起requests请求到数据提取与存储的过程,并实现了批量采集与翻页功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一期就和大家分享一下如何爬取京东商品的评价信息,这里先设置爬取50页,以做日后分析。

准备工作

下面是本项目要用到的第三方库。

import requests
import json
import time
import random

一、查找商品并检查网页

在浏览器里打开京东网站,随便找一款商品,这里我以华为P30手机为例(因本文内容不做深入研究,所以暂先不需要登录)然后在页面中右键选择检查(或F12)打开开发者模式。
在这里插入图片描述

二、查找评论链接

在网页中找到评论按钮并点击使其加载数据,然后我们点击network查看数据。接着查找加载评论数据的请求url,我们可以复制某条评论中的一段话,然后在调试窗口中(Ctrl+F)调用搜索框进行搜索,可以得到对应的结果:在这里插入图片描述

三、发起requests请求

得到评论数据接口url之后,就可以开始写代码抓取数据了。我们先尝试抓取一条数据,成功之后,再去分析如何实现批量抓取。上一篇我们已经讲解了如何使用requests库发起http请求,我们来看看代码:

def spider_comment(page=0):
    url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchcomment98&productId=100004404944&' \
              'score=0&sortType=5&page=%s&pageSize=10&isShadowSku=0&fold=1' % page
    try:
        headers = {
            "referer": "https://item.jd.com/100004404944.html",
            "user - agent": "Mozilla / 5.0"
        }
        r = requests.get(url, headers=headers)
        r.raise_for_status()
    except:
        print("error")

四、数据的提取

点击查找后得到的结果,可以得到一组字符串,这便就是我们想要得到的结果。当然,此数据为jsonp跨域请求返回的json结果,所以我们只要把前面的’ fetchJSON_comment98( '和最后的 ’ ) ’ 去掉就可以得到json数据了,因为每个商品的编号可能不同,所以这里不做统一。json以键值对的形式保存,其中有一个名称为comments的key里面存放这我们想要的评论数据。再对comments值进行分析发现它包含了评论的内容,时间,id等信息,我们想要得到的评价内容则隐藏在content字段中。
在这里插入图片描述

	# 去除前后无用字符
	json_str = r.text[15:-2]
    # 将json转换为python对象
    json_obj = json.loads(json_str)
    # 获取评价列表
    comments = json_obj['comments']
    # 可以用for循环打印出所有评论
    for comment in comments:
    	print(comment['content']+'\n')

五、数据存储

提取数据之后,我们将信息以TXT文本文件的格式保存起来,方便以后使用(这里提前创建好txt文件,只需循环写入即可)。

    for comment in comments:
        with open('E:/python/resource/comments.txt', 'a+') as f:
            f.write(comment['content'])
            f.write('\n')

六、实现翻页,批量采集

完成第一页数据采集之后,我们来研究一下如何批量抓取?让我们看一看第一页评论数据的url:

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

可以看到链接里面有两个参数 page=0&pageSize=10,page表示当前的页数,pageSize表示每页多少条,所以使这里的数字发生改变就可以实现翻页的功能。了解了翻页的原理后,那我们就开始实现它吧。首先,找到第二页按钮并点击,然后复制第一条评价去调试窗口搜索(方法同上),然后点击Headers查看第二页请求数据的url:

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

通过比较第一页评价与第二页评价的url的区别,可以看出第一页page=0,第二页page=1,以此类推。所以只要在每次请求时将page参数递增就可以实现翻页了,这里可以利用迭代器来实现,(对spider_comment方法增加入参page:页数,然后在url中增加占位符,这样就可以动态修改url,爬取指定的页数)。我们来看一下代码:

def change_page():
    for i in range(50):
        spider_comment(i)
        time.sleep(random.random() * 5)
    print("ok")

# 调用主函数
if __name__ == '__main__':
    change_page()

注:在for循环中设置了一个随机的休眠时间,用来模拟用户浏览,防止爬取太频繁被封ip

让我们看一看爬取的结果吧!
在这里插入图片描述

附源代码:

# coding='utf-8'
import requests
import json
import time
import random
import jieba


headers = {
        "referer": "https://item.jd.com/100004404944.html",
        "user - agent": "Mozilla / 5.0"
    }


def spider_comment(page=0):
    url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchcomment98&productId=100004404944&' \
          'score=0&sortType=5&page=%s&pageSize=10&isShadowSku=0&fold=1' % page
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
    except:
        print("error")
    # 获取json字符串
    json_str = r.text[15:-2]
    # 将json转换为python对象
    json_obj = json.loads(json_str)
    # 获取评价列表
    comments = json_obj['comments']
    # 遍历列表并写入
    for comment in comments:
        with open('E:/python/resource/comments.txt', 'a+') as f:
            f.write(comment['content'])
            f.write('\n')


def change_page():
    for i in range(2):
        spider_comment(i)
        time.sleep(random.random() * 5)
    print("ok")


if __name__ == '__main__':
    # spider_comment()
    change_page()

如有错误,欢迎私信纠正,谢谢支持!

爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
Python爬虫用于从网站上抓取数据,京东商品评论通常是动态加载或者存在Ajax请求中,因此要爬取京东商品评论,你需要使用一些技术来处理。以下是一个简单的步骤概述: 1. **选择合适的库**:使用Python的`requests`库来发送HTTP请求,`BeautifulSoup`或`lxml`库来解析HTML内容,`Selenium`库(如果评论是通过JavaScript加载的)来模拟浏览器行为。 ```python import requests from bs4 import BeautifulSoup ``` 2. **获取初始页面**:首先获取包含评论链接的页面,通常这是商品详情页。 3. **分析页面结构**:查看页面源代码,找到评论链接的规律,可能是URL后缀、参数或者通过JavaScript动态生成的。 4. **动态加载处理**:如果是AJAX加载的评论,可能需要用到如Selenium、Scrapy-Splash 或者 Pyppeteer 这样的工具结合 BeautifulSoup。 5. **循环和深度优先**:编写循环来遍历每一页评论,有些评论可能分页显示,需要递归或设置循环条件。 6. **数据提取**:使用BeautifulSoup解析每个评论元素,提取评论内容、用户信息、评分等信息。 7. **保存数据**:将数据写入CSV、JSON或数据库文件。 8. **处理反爬机制**:注意检查京东的反爬策略,可能需要设置User-Agent、添加延迟请求间隔、使用代理IP等。 相关问题: 1. 如何判断京东评论是否为AJAX加载? 2. 如果遇到反爬机制,应该如何应对? 3. 使用Selenium爬取评论时,如何控制浏览器行为?
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值