我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1252|回复: 16

1抓取京东商品详情页数据到csv---Python

[复制链接]

该用户从未签到

61

主题

203

回帖

0

积分

二级逆天

积分
0

终身成就奖特殊贡献奖原创先锋奖

发表于 2020-4-22 17:43:05 | 显示全部楼层 |阅读模式
[/free]# 爬取京东商品详情页信息
import requests
from bs4 import BeautifulSoup
import os  #os模块包含普遍的操作系统功能
import csv
import re
import json
import time

# 爬取页面链接
def make_a_link(keyword, page):
    try:
        url='https://search.jd.com/Search?keyword='+ keyword + '&enc=utf-8&page=' + str(2 * page - 1)
        r = requests.get(url)
        #如果状态码是40X或者50X,那么可以使用Response.raise_for_status()抛出一下异常
        # 如果是返回200,则raise_for_status()并不会抛出异常。
        r.raise_for_status
        print('正在爬取第{}页...'.format(page))
        print('---' * 45)
        r.encoding = 'gbk'
        print(url)
        return r.text
    except:
        print('链接错误!!!')
        return ''
#查找每件商品的页面链接
def find_only_link(html):
    soup = BeautifulSoup(html, 'lxml')
    links = soup.find_all('div', class_='gl-i-wrap')
    return (link.find('div', class_='p-name p-name-type-2').a['href'] for link in links)  # 页面链接的生成表达式
# 链接单页面
def link_to_url(link):
    try:
        r = requests.get(link)
        r.raise_for_status
        r.encoding = 'gbk'
        return r.text
    except:
        print('此页无法链接!!!')
        return ''
# 爬取商品价格
def getprice(purl):
    uid = re.match(r'.+?(\d+).+', purl).group(1)
    content = link_to_url('https://p.3.cn/prices/mgets?skuIds=J_' + uid)
    jd = json.loads(content.lstrip('[').rstrip(']\n'))  # 生成json数据格式
    return jd['p']
# 爬取商品评论
def getcomment(purl):
    uid = re.match(r'.+?(\d+).+', purl).group(1)
    content = link_to_url('https://club.jd.com/comment/productCommentSummaries.action?referenceIds=' + uid)
    jd = json.loads(content)
    comment = []
    jds = jd['CommentsCount'][0]
    comment.append(jds['CommentCountStr'])  # 评论数
    comment.append(jds['GoodCountStr'])  # 好评数
    comment.append(jds['GoodRate'])  # 好评率
    return comment
# 爬取商品名称
def getname(purl):
    uid = re.match(r'.+?(\d+).+', purl).group(1)
    content = link_to_url('https://c.3.cn/recommend?&methods=accessories&sku=' + uid + '&cat=9987%2C653%2C655')
    try:
        jd = json.loads(content)
        return jd['accessories']['data']['wName']
    except:
        return ''
# 爬取卖家
def getseller(purl):
    uid = re.match(r'.+?(\d+).+', purl).group(1)
    content = link_to_url('https://chat1.jd.com/api/checkChat?pid=' + uid + '&returnCharset=utf-8')
    try:
        jd = json.loads(content.lstrip('null(').rstrip(');'))
        try:
            return jd['seller']
        except:
            return ''
    except:
        ''
  # 保存到csv
def save_to_csv(ulist, keyword):
    path = 'F:/Python代码/爬虫/'   #路径
    # if not os.path.exists(path):  #是否存在该目录
    #     os.mkdir(path)  #创建目录
    with open(path + '京东' + keyword + '数据.csv', 'w+') as f:
        writer = csv.writer(f)   #写入csv
        writer.writerow(['商品', '价格', '店铺', '链接', '评论数', '好评数', '好评率'])
        for i in range(len(ulist)):
            if ulist and ulist[0]:
                writer.writerow(
                    [ulist[0], ulist[1], ulist[2], ulist[3], ulist[4], ulist[5], ulist[6]])
                # 主函数
def relmain(keyword):  # 高阶函数
    def main(page):
        r = re.compile(r'.*?html')
        ulist = []
        for p in range(page):
            p += 1
            text = make_a_link(keyword, p)
            for url in find_only_link(text):
                ul = []
                if r.match(url):
                    if getname(url):
                        ul.append(getname(url))  # 商品名称
                        ul.append(getprice(url))  # 价格
                        ul.append(getseller(url))  # 店铺
                        ul.append('https:' + url)  # 链接
                        ul.extend(getcomment(url))  # 评论
                ulist.append(ul)  #列表中含有列表  可以看做是二维数组
        save_to_csv(ulist, keyword)
    return main

if __name__ == '__main__':
    keyword = input('输入要爬取的商品:')
    pages = int(input('输入要爬取的页数:'))
    time_start = time.time()
    relmain(keyword)(pages)
    print('耗时{}秒。'.format(time.time() - time_start))  # 爬取所需时间[free]
购买主题 本主题需向作者支付 5 枚金币 才能浏览
回复

使用道具 举报

该用户从未签到

523

主题

325

回帖

0

积分

二级逆天

微信交流群:jp-xxj1

积分
0

终身成就奖特殊贡献奖原创先锋奖金点子奖

发表于 2020-4-22 17:48:05 | 显示全部楼层
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-10-7 21:17
  • 签到天数: 103 天

    [LV.6]常住居民II

    49

    主题

    1万

    回帖

    7万

    积分

    三级逆天

    积分
    73138

    终身成就奖特殊贡献奖原创先锋奖社区居民忠实会员社区劳模最爱沙发社区明星原创达人优秀斑竹奖宣传大使奖

    QQ
    发表于 2020-4-23 06:17:14 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    6740

    回帖

    1280

    积分

    二级逆天

    积分
    1280

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2020-4-23 07:40:04 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-15 11:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    1288

    回帖

    1298

    积分

    二级逆天

    积分
    1298

    终身成就奖

    发表于 2020-4-23 08:00:19 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情

    2024-6-14 08:53
  • 签到天数: 1 天

    [LV.1]初来乍到

    83

    主题

    2443

    回帖

    5148

    积分

    1元学习PADS(5期)

    积分
    5148

    社区居民终身成就奖优秀斑竹奖

    QQ
    发表于 2020-4-23 08:35:51 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情

    2024-6-14 08:53
  • 签到天数: 1 天

    [LV.1]初来乍到

    83

    主题

    2443

    回帖

    5148

    积分

    1元学习PADS(5期)

    积分
    5148

    社区居民终身成就奖优秀斑竹奖

    QQ
    发表于 2020-4-23 08:35:57 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-8 15:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    60

    主题

    5331

    回帖

    1万

    积分

    PADS-181217初级班

    积分
    15973

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2020-4-23 08:46:03 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    4703

    回帖

    5

    积分

    二级逆天

    积分
    5

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2020-4-23 08:59:31 | 显示全部楼层
    感谢楼主分享资源 !!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    344

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    QQ
    发表于 2020-4-23 09:02:24 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    公告:服务器刚移机,
    大家请不要下载东西。
    会下载失败


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表