P3 商品信息抓取

### (一)数据分类
#1. 静态数据
#2. 动态数据

### (二)代码实现流程
#1. 访问到数据来源
#2. 取数据,将需要的商品信息提取出来
#3. 保存数据

'''
参考 bilibili《惊!当我在双十一用Python爬取京东数十万条商品数据和评论,进行可视化分析后发现.....》
'''

import requests
import parsel
import csv


with open('C:/Users/86189/Desktop/京东商品.csv',mode='w',encoding='utf-8',newline="") as f:
    csv.writer(f).writerow(["title","price","shop","detail_url"]) # 引号快捷键:【使用Shift + 引号键】
# mode中这里是w,下面是a(w是覆盖写入,a是追加写入)


### 如何找到正确对应的URL
# 打开“检查”,点击Network,CTRL+R 刷新界面,在搜索框搜索与商业信息有关的内容(如输入”华为畅享“此类字段),点击出现的Header属性

headers = {
    'Referer':'https://search.jd.com/',
    'Origin':'https://search.jd.com',
    'Cookie':'__jdv=122270672%7Cdirect%7C-%7Cnone%7C-%7C1723344360225; mba_muid=1723344360223889980773; 3AB9D23F7A4B3CSS=jdd03DDJ35H5KJH5BJE4JUAXMLFRVPFKV3ICM2WC2UBXBVIMSPKBPREDMRX5E56R4DDVPDCBHZAYF7KY4ONN2UDI5TUZGYQAAAAMRH5KBTGQAAAAACL27ASRMUNEVTQX; __jdu=1723344360223889980773; TrackID=1pbo0AydHEXqZegmwoFWyywmjd4a2izt8ogqS4ZvcYXOWap6t9c_lxIuBd3NzHtWz-r2EZoMzhYZvxI_ym9L9SbUwXfiUii33Wex7DbfPptY; thor=7AA0A3083246CBD2944A28D8BE895268E8BF56F3367134CFACE59C015C53BAC6A16E44F39DD8D193A15C1AFB682106A289C10B05376B9743E68B14D18EC2C1A602A6286A9233DD1610DD4983934F5DCF3925B4FD63C1AD7A63732F1A654E9F73870D3AA8AC5FEB7CA33C672B53FD3A2CC3D271266A709120A9704EF7B08D18E66FC3BD5E9A30A8A1134279F50EC48E73402E255796DA3E71D7AD0724969F185B; pinId=96knPOjqUXCM7BezoGw-nQ; pin=jd_owZNkKmyKwCf; unick=jd_03iqkp6agdzw23; ceshi3.com=000; _tp=qJRXnwzwrWtxb9VoxCkPrg%3D%3D; _pst=jd_owZNkKmyKwCf; shshshfpa=7262d375-eb13-1324-42eb-086d4cbb31e6-1723344429; shshshfpx=7262d375-eb13-1324-42eb-086d4cbb31e6-1723344429; xapieid=jdd03DDJ35H5KJH5BJE4JUAXMLFRVPFKV3ICM2WC2UBXBVIMSPKBPREDMRX5E56R4DDVPDCBHZAYF7KY4ONN2UDI5TUZGYQAAAAMRH5KBTGQAAAAACL27ASRMUNEVTQX; rkv=1.0; qrsc=1; areaId=1; ipLoc-djd=1-2802-0-0; __jda=143920055.1723344360223889980773.1723344360.1723344360.1723344360.1; __jdc=143920055; shshshfpb=BApXSPr9dPPRAlH1lGVT9kPAiYRr3fYA8BmF1QwZo9xJ1MpMdpYC2; 3AB9D23F7A4B3C9B=DDJ35H5KJH5BJE4JUAXMLFRVPFKV3ICM2WC2UBXBVIMSPKBPREDMRX5E56R4DDVPDCBHZAYF7KY4ONN2UDI5TUZGYQ; flash=3_iv_FaS2zdCKArumksSwnIboOEHISAXWOXkhmAh_RzLz4SdoZA0bFbdYlbtoT-XZpNT9eHHCNYj7aHN4VxBuD_wqg5l4R0Wxx7d24vB4YUtMsY6i_KV41TsbqgqG9lJ_aM1C_uRmMKcTfY0YSZGXyOX54XK4IX4r1ucxbbvkQWNv3S-kerm70',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# User-Agent是不变的
# Cookie是会随着网站的变化而改变的【每写一个爬虫都要重新写一个!!!】
#【若出现<403>的字样,可以多加一些header相关内容是为了”伪装的更像用户“】

for page in range(1,10):
    url = f'https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page={page}&s=115%27'
    response = requests.get(url=url, headers=headers)

    # print(response.text)
    # 步骤:这里可以打印出网络源代码的内容,将其复制到一个txt文件当中,先去掉首位的”C:\Program...“和”Process finished...“字样,随后txt文件名的后缀改为【html】;打开该文件后,点击检查。
    # 目的:这样做可以简化代码结构(忽略图片,音乐,视频等信息)

    html_data = response.text
    # 这里的意思是抓取所有的网页源代码数据

    # .text:取响应的文本内容
    # .json():取JSON数据转化为字典格式
    # .content:取二进制数据


    select = parsel.Selector(html_data)
    goods = select.xpath('//div[@class="gl-i-wrap"]')
    # 目标源代码:div class="gl-i-wrap"
    for good in goods:
        price = good.xpath('string(.//div[@class="p-price"])').get("").strip() # strip去掉空格
        # 目标源代码:div class="p-price"
        # 在元素good路径中div class="p-price"下的文字格式(字符串string)的信息
        # .get("")的原型为.get(),里面括号里加上""表示如果商品没有价格会输出【空字符串】 (否则:strip遇上空值None会报错)

        title = good.xpath('string(.//div[@class="p-name p-name-type-2"])').get("").strip()
        shop = good.xpath('string(.//div[@class="p-shop"])').get("").strip()
        detail_url=good.xpath('.//div[@class="p-name p-name-type-2"]/a/@href').get()
        # 获取属性(不同于文本内容:①不用加string;②/a/@href:提取的是元素a)
        '''
        目标源代码(节选):
        <a target="_blank" title="" href="//item.jd.com/100044835937.html" onclick="searchlog(1, '100044835937','0','1','','flagsClk=2097575');">
                                                    <em>
                                                        小米(MI)Redmi Note12 5G <font class="skcolor_ljg">手机</font>
                                                        120Hz OLED屏幕  骁龙4移动平台 5000mAh 8GB+256GB子夜黑 t turbo
                                                    </em>
                                                    <i class="promo-words" id="J_AD_100044835937"></i>
                                                </a>                                  
        '''
        print(title,price,shop,detail_url)
        with open('C:/Users/86189/Desktop/京东商品.csv', mode='a', encoding='utf-8', newline="") as f:
            csv.writer(f).writerow([title,price,shop,detail_url])  # 引号快捷键:【使用Shift + 引号键】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值