京东手机销量排名
全局排名、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')