爬虫笔记_08

这段代码用于爬取京东网站上手机销量排名的前几页数据,分别按全局、Apple、华为、小米四个维度进行整理,并将结果保存到Excel文件中。通过PyQuery库解析HTML,获取产品名称、价格和卖家信息,并根据产品名称判断其属于哪个品牌,然后将信息写入对应的Excel工作表。

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

京东手机销量排名
全局排名、apple排名、华为排名、小米排名

动态html,需要找到正确的代码

# 产品价格,产品名称,卖家
from pyquery import PyQuery as pq
import requests
import time
import xlwt
def get_one_page(url):
    try:
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
            'cookie': 'cookie信息'
            }
        result=requests.get(url,headers=headers)
        if result.status_code==200:
            return result.text
        return None
    except Exception:
        return None

# 分析搜索页面的HTML代码,产生器函数
def parse_one_page(html):
    doc=pq(html)
    # 获取ul节点
    # ul=doc('.gl-warp.clearfix')
    # 获取ul节点的li节点
    liList=doc('.gl-item')
    print(len(liList))
    # 处理每一个li节点,使用items函数获得每一个li节点,获得PyQuery对象
    for li in liList.items():
        # 获得手机产品名称
        product=li('div>div.p-name.p-name-type-2>a').attr('title')
        # print(product)
        # 获取价格
        price=li('div>div.p-price>strong>i').text()
        # print(price)
        # 获取产品卖家
        seller=li('div>div.p-shop>span>a').text()
        # print(seller)
        yield {
            'product':product,
            'price':price,
            'seller':seller
        }

if __name__ == '__main__':
    # 'https://search.jd.com/s_new.php?keyword=手机&psort=3&wq=手机&psort=3&pvid=8858151673f941e9b1a4d2c7214b2b52&page=2&s=31&scrolling=y&log_id=1669734409622.5240&tpl=3_M&isList=0&show_items='
    urls=['https://search.jd.com/s_new.php?keyword=手机&psort=3&wq=手机&psort=3&pvid=8858151673f941e9b1a4d2c7214b2b52&page={}&s=31&scrolling=y&log_id=1669734409622.5240&tpl=3_M&isList=0&show_items='.format(str(i)) for i in range(1,5)]
    # 定义excel头
    head=['排名','产品','价格','卖家']
    book=xlwt.Workbook(encoding='utf-8')
    # 为所有手机排名创建sheet页
    sheet_all=book.add_sheet('为所有手机销量排名')
    # 为apple手机排名创建sheet页
    sheet_apple=book.add_sheet('为apple手机销量排名')
    # 为华为手机排名创建sheet页
    sheet_huawei=book.add_sheet('为华为手机销量排名')
    # 为小米手机排名创建sheet页
    sheet_xiaomi=book.add_sheet('为小米手机销量排名')
    # 为每一个sheet添加表头
    for h in range(len(head)):
        sheet_all.write(0,h,head[h])
        sheet_apple.write(0,h,head[h])
        sheet_huawei.write(0,h,head[h])
        sheet_xiaomi.write(0,h,head[h])
    # 下面4个变量分别控制总排名的名称,apple、华为、小米排行的名称
    i=1
    apple_i=1
    huawei_i=1
    xiaomi_i=1
    for url in urls:
        moblie_infos=parse_one_page(get_one_page(url))
        # 处理每一部手机的信息
        for moblie_info in moblie_infos:
            print(moblie_info)
            # 将手机信息添加到第一个sheet页中
            sheet_all.write(i,0,str(i))
            sheet_all.write(i,1,moblie_info['product'])
            sheet_all.write(i,2,moblie_info['price'])
            sheet_all.write(i,3,moblie_info['seller'])
            # 在产品名称搜索,如果包含apple说明手机apple手机,将该手机的信息天骄到第2个sheet页
            if moblie_info['product'].lower().find('apple') != -1:
                sheet_apple.write(apple_i,0,str(apple_i))
                sheet_apple.write(apple_i,1,moblie_info['product'])
                sheet_apple.write(apple_i,2,moblie_info['price'])
                sheet_apple.write(apple_i,3,moblie_info['seller'])
                apple_i+=1
            # 在产品名称搜索,如果包含huawei说明手机华为手机,将该手机的信息天骄到第3个sheet页
            if moblie_info['product'].lower().find('华为') != -1:
                sheet_huawei.write(huawei_i,0,str(huawei_i))
                sheet_huawei.write(huawei_i,1,moblie_info['product'])
                sheet_huawei.write(huawei_i,2,moblie_info['price'])
                sheet_huawei.write(huawei_i,3,moblie_info['seller'])
                huawei_i+=1
            # 在产品名称搜索,如果包含xiaomi说明手机小米手机,将该手机的信息天骄到第4个sheet页
            if moblie_info['product'].lower().find('小米') != -1:
                sheet_xiaomi.write(xiaomi_i,0,str(xiaomi_i))
                sheet_xiaomi.write(xiaomi_i,1,moblie_info['product'])
                sheet_xiaomi.write(xiaomi_i,2,moblie_info['price'])
                sheet_xiaomi.write(xiaomi_i,3,moblie_info['seller'])
                xiaomi_i+=1
            time.sleep(0.1)
            i+=1

    book.save('mobile_rank.xls')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值