专注app软件定制开发Python爬取京东商品评论数据

一、前言

专注app软件定制开发本文将承接笔者的上篇文章,专注app软件定制开发使用京东商品唯一id字段“sku”拼接url,专注app软件定制开发得到真实的京东商品评论网址,专注app软件定制开发进而解释数据并保存到文件中,专注app软件定制开发所爬取到的数据将可以专注app软件定制开发用于后续的统计分析或专注app软件定制开发更深层次的挖掘分析。

二、爬取步骤详解

1. 找到真实的url

所有的爬虫都是要靠真实的url去获取并解析数据,京东商品评论数据网址是做了一定的反爬措施的。以“华为手机”为搜索关键字为例,点击任意一个华为手机,进入该手机的详情页面,继续点击“商品评价”,随便复制一句评论数据,右键查看网页源代码,Ctrl+F打开搜索框,粘贴刚才复制的评论数据,发现并没有找的该数据。

这时候就需要立刻打开浏览器调试工具了,右键点击“检查“”即可,打开调试工具之后,依次按下图点击。

然后继续找到“商品评论”并点击,好评、中评、差评。

点击完之后,经自己一个个网址查看,我们找到了这个网址有我们需要的数据。

2. 分析网址参数

找到真实的url后,我们还不能直接下结论其就是真实的url,复制该url,打开新链接,发现数据还是我们刚才调试时看到的额数据,证明了我们找到了真实的url。

开始分析url参数,很明显,“callback=fetchJSON_comment98”为回调函数,我们发现上图中也有该数据,对于这类参数,可以直接删除。

删除该参数之后,重新刷新网址,发现该数据在源数据已经消失了,说明该参数并不影响我们爬取数据。
继续分析,我们发现“score=0”,如果掌握基本英文知识,很容易猜到“score=”后的数字表示评论数据分类,经笔者分析,0表示全部评论,1、2、3分别表示差评、中评、好评的评论,由于全部评论中包含部分差中好评论,本文只爬取这差中好三类数据。
接着分析该url参数,显而易见,“productId=”后的一串数据即为商品的唯一id,对应商品列表页sku字段。至此,我们已经找到了构造真实url的参数,下面开始写代码爬取。

三、完整代码

1. 导入所需包

import requestsimport jsonimport timeimport reimport randomimport pandas as pdfrom faker import Fakerfrom multiprocessing import Poolimport osfrom openpyxl import Workbook, load_workbookfrom python爬虫.爬虫项目 import random_ipip = random_ip.dailiips()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

其中,json用于解析Json格式数据,faker用于生成随机浏览器请求头,multiprocessing为多进程相关模块,最终两行为笔者的的代理IP生成模块。免费的代理IP对京东来说作用不大,大家可以直接忽视该参数。

2. 创建保存数据的文件

try:    wb = load_workbook(filename='京东双十一华为手机评论信息.xlsx')    sheet = wb.activeexcept:    wb = Workbook()    sheet = wb.active  # 激活工作簿    sheet.title = '京东双十一华为手机评论信息'  # 设置工作簿名称    # 设置表头    sheet['A1'] = 'title'    sheet['B1'] = 'user_id'    sheet['C1'] = 'creationTime'    sheet['D1'] = 'score'    sheet['E1'] = 'content'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

以上代码的意思是若没有“京东双十一华为手机评论信息.xlsx”文件,就直接创建该文件,有则直接打开文件。

3. 基本配置

headers = {    'User-Agent': Faker().chrome(),    'Referer': 'https://item.jd.com/100011386554.html'}base_url = 'https://club.jd.com/comment/productPageComments.action?&productId=100011177233&score=1&sortType=5&page=1&pageSize=10&isShadowSku=0&fold=1'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

主要是构造请求头和base网址,方便后续使用。

4. 主体爬虫代码

def get_comment_id(start, end):    '''    读取京东商品的商品标题和sku(sku暂不知晓,记为商品评论唯一id)    :param start: 开始的索引    :param end: 结束的索引    :return: 标题、skus列表    '''    df = pd.read_excel(r'C:\Users\HTHDS\Desktop\python\python爬虫\爬虫项目\京东双十一华为手机信息.xlsx')    names = df['name'][start:end]    skus = df['sku'][start:end]    return names, skusdef get_maxpage(sku):    '''    获取每类评论(好评、中评和差评)的最大页数    :param sku: 商品评论唯一id    :return:    '''    global base_url    maxpagelist = []    for score in [1, 2, 3]:        url = base_url.replace('score=1', f'score={score}').replace('productId=100011177233', f'productId={sku}')        print(url)        response = requests.get(url, proxies=random_ip.dailiips(), headers=headers).text        html = response        json_data = json.loads(html)        maxpagelist.append(int(json_data['maxPage']))    return maxpagelistdef get_url(score, page, sku, title):    '''    获取每页评论的评论数据    :param score: 评论类别    :param page: 页码    :param sku: 商品唯一id    :param title: 标题    :return: 获取到的评论数据    '''    global base_url    print('正在爬取第{}页,id={}'.format(page, os.getpid()))    url = base_url.replace('page=1', f'page={page}').replace('score=1', f'score={score}').replace('productId=100011177233', f'productId={sku}')    data_list_list = get_comment(url, headers=headers, title=title)  # 调用采集方法    return data_list_listdef get_comment(url=None, headers=None, title=''):    '''    采集评论数据    :param url: 评论链接    :param headers: 请求头    :param title: 标题    :return: 获取到的评论数据    '''    data_list_list = []    response = requests.get(url, proxies=random_ip.dailiips(), headers=headers).text    html = response    json_data = json.loads(html)    comment = json_data['comments']    for data in comment:        user_id = data['id']   # 评论用户id        creationTime = data['creationTime']   # 评论时间        content = data['content'].strip()   # 评论文本        content = re.sub('','',content)        score = data['score']  # 评分        data_item = [title, user_id, creationTime, score, content]        data_list_list.append(data_item)        print(data_item)    return data_list_listdef write_comment(data_list_list=None):   for data in data_list_list:       sheet.append(data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

以上即为主体的京东商品评论爬取代码,爬取逻辑是先获取商品标题和sku,然后获取每类评论的最大页数,接着拼接真实的url,解析数据后并添加到到Excel文件中,其中write_comment可以合并到解释数据中,笔者这样写只是让爬取过程更清晰,方便理解代码。

5. 开启爬虫程序

def main():    start = time.time()    # 创建10个进程    pool = Pool(10)    names, skus = get_comment_id(13, 14)    for name, sku in zip(names, skus):        print(name)        sp = get_maxpage(sku)        for s, v in enumerate(sp):            for p in range(int(v)):                pool.apply_async(get_url, args=(s+1, p, sku, name), callback=write_comment)                time.sleep(random.randint(5, 8))        time.sleep(random.randint(60, 80))    pool.close()  # 无任务就关闭所有子进程    pool.join()  # 子进程未结束阻止主进程执行下面程序    wb.save(filename='京东双十一华为手机评论信息.xlsx')    end = time.time()    print('此次爬完数据用时:', (end-start))if __name__ == '__main__':    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

main函数里主要是构建起整个爬虫的过程,若读者还未了解过多进程相关的知识,建议先把该方面的知识补全再来看代码的运行逻辑。但尽管本文用到了多进程的爬取方式,但并没有发挥多大作用,京东在访问的时间限制上做的比较严格,不如直接用单线程爬取。

6. 结果

爬取到的部分数据如下:

本文完成了京东商品评论数据的爬取全过程,其中有些细节笔者可能没有讲到,这需要大家自己动手实践,提升自己的爬虫能力与效率。申明:本文爬取京东商品仅为技术交流,建议不可过快过多爬取京东的网页数据,以免造成不必要的麻烦!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发