日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据解读京东上最受欢迎的面包

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据解读京东上最受欢迎的面包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

戳藍字“CSDN云計算”關注我們哦!



作者:?黃超 就職頂新集團智能科技公司 數據從業者




前言



什么樣的面包品牌最好賣?什么樣的口感最受歡迎?相信每一位喜歡面包的朋友都會關心這些問題。本文通過爬取京東面包類數據,一方面回答大家關于此前關于面包的各種問題,另一方面也帶大家了解一份完整的數據報告,可以從中有所借鑒。



數據爬取(部分代碼)




構建解析詳情頁的代理



def?disguiser():
'''
構建解析詳情頁的代理
'''

try:
req = request.Request('http://www.agent.cn/xdaili-api//greatRecharge/getGreatIp?spiderId=8f75fb741de34cfb95adf347910db7a9&orderno=YZ20191169208Yi1jmu&returnType=2&count=1')
resp = request.urlopen(req)
jsonIP = resp.read().decode()
jsonIP = re.sub(' ','',jsonIP)
ipList = re.findall('"ip":"(.*?)"',jsonIP)
portList = re.findall('"port":"(.*?)"',jsonIP)
value = list(map(lambda?x,y : x +?':'?+ y,ipList, portList))
key = ['http']
ipDict = {key[index] : value[index]?for?index?in?range(len(key))}
print(ipDict)
# 1. 使用ProxyHandler,傳入代理構建一個handler
handler = request.ProxyHandler(ipDict)?# key: http/https val: ip:port
# 2. 使用上面創建的handler構建一個opener
opener = request.build_opener(handler)
print(opener)
except:
time.sleep(6)
req = request.Request('http://www.agent.cn/xdaili-api//greatRecharge/getGreatIp?spiderId=8f75fb741de34cfb95adf347910db7a9&orderno=YZ20191169208Yi1jmu&returnType=2&count=1')
resp = request.urlopen(req)
jsonIP = resp.read().decode()
jsonIP = re.sub(' ','',jsonIP)
ipList = re.findall('"ip":"(.*?)"',jsonIP)
portList = re.findall('"port":"(.*?)"',jsonIP)
value = list(map(lambda?x,y : x +?':'?+ y,ipList, portList))
key = ['http']
ipDict = {key[index] : value[index]?for?index?in?range(len(key))}
print(ipDict)
# 1. 使用ProxyHandler,傳入代理構建一個handler
handler = request.ProxyHandler(ipDict)?# key: http/https val: ip:port
# 2. 使用上面創建的handler構建一個opener
opener = request.build_opener(handler)
return?opener



解析詳情頁的內容


def?parser(pageQueue, uaPool, priceRequestDoc, PRICEBASEURL, detailRequestDoc, open):
'''
解析詳情頁的內容
'''

detailUrl = pageQueue.get()[1]
print(detailUrl)
# 價格
PRICEURL = PRICEBASEURL + re.search('\d+',detailUrl).group()
priceRequestDoc = re.sub(r' ','',priceRequestDoc)
headers_for_price = dict(re.findall('([-\w\d]*?):(.*)',priceRequestDoc))
headers_for_price.update(uaPool[random.randint(0,len(uaPool)-1)])?# 獲取商品價格信息請求的headers信息
req = request.Request(PRICEURL, headers = headers_for_price)
resp = open(req)?#第一次響應
print(PRICEURL,'商品價格頁請求響應碼:',resp.getcode())
if?resp.getcode() ==?200:
info = resp.read().decode()
elif?SERVER_ERROR_MIN <= response.status_code < SERVER_ERROR_MAX:
for?i?in?range(5):
time.sleep(i**i)?#可以繼續優化,第一次1秒,第二次10秒,第三次100秒...
resp = open(req)
if?resp.getcode() ==?200:
break
elif?SERVER_ERROR_MIN <= response.status_code < SERVER_ERROR_MAX:
if?response.status_code ==?404:
print('page not found')
elif?response.status_code ==?403:
print('have no right')
else:
pass
info = json.loads(info)
item_price = info[0]['p']

# 名稱 品牌 是否含糖 保質期 配料 包裝 商品產地...
detailRequestDoc = re.sub(r' ','',detailRequestDoc)
headers_for_detail = dict(re.findall('([-\w\d:]*):(.*)',detailRequestDoc))
headers_for_detail.update(uaPool[random.randint(0,9)])?# 獲取商品價格信息請求的headers信息
req = request.Request(detailUrl, headers = headers_for_detail)
resp = open(req)?# 第二個響應
print(detailUrl,'詳情頁請求響應:',resp.getcode())
if?resp.getcode() ==?200:
pass
elif?SERVER_ERROR_MIN <= response.status_code < SERVER_ERROR_MAX:
for?i?in?range(5):
time.sleep(i**i)?#可以繼續優化,第一次1秒,第二次10秒,第三次100秒...
resp = open(req)
if?resp.getcode() ==?200:
break
elif?SERVER_ERROR_MIN <= response.status_code < SERVER_ERROR_MAX:
if?response.status_code ==?404:
print(detailUrl,'page not found')
elif?response.status_code ==?403:
print(detailUrl,'have no right')
else:
pass
parser = etree.HTMLParser(encoding =?'gbk')
html = etree.parse(resp, parser = parser)
print(html)
elements = html.xpath("//ul[@class='parameter2 p-parameter-list']//text() | //dl[@class='clearfix']//text()")
detailInfo = list(filter(lambda?msg : len(msg.strip()) >?0?and?msg, elements))
detailInfo = ('#').join(detailInfo)
try:
item_name = re.search('商品名稱:(.*?)#',detailInfo).group(1)
except?AttributeError:
# print('商品沒有 item_name 信息')
item_name =?'n'
try:
item_id = re.search('\d+',detailUrl).group()
except?AttributeError:
# print('商品沒有 item_id 信息')
item_id =?'n'
# 大商品名稱
elementTitle = html.xpath("//title//text()")[0]
elementTitle = elementTitle.strip()
item_fullName = re.search('(【.*】)*(.*)?【',elementTitle).group(2)
# 品牌
elementBrand = html.xpath("//*[@id='crumb-wrap']/div/div[1]/div[7]/div/div/div[1]/a/text()")
elementBrand = list(filter(lambda?msg : len(msg.strip()) >?0?and?msg, elementBrand))
try:
item_brand = elementBrand[0]
except?IndexError:
item_brand =?'npl'
yield?{
'item_id':item_id,
'item_fullName':item_fullName,
'item_name':item_name,
'item_price':item_price,
'item_brand':item_brand,
'gross_weight':gross_weight,
'item_origin':item_origin,
'item_certification':item_certification,
'processing_technology':processing_technology,
'packing_unit':packing_unit,
'is_suger':is_suger
}


由于公眾號篇幅有限,無法展示本文全部代碼,我們已將代碼放入百度云盤。后臺回復“面包”,可以獲取本文代碼。



分析正文





?



福利

掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!


2、公眾號后臺回復“面包”,可以獲取本文代碼


推薦閱讀:

  • 女神節 | 那些奮斗在IT領域的“女神”們

  • 云漫圈 | 如何給女朋友解釋什么是HTTP

  • 趣挨踢 | 跳槽季,讓我們一起攻克算法吧!

  • 互聯網沒有春天

  • 學 Python 沒找對路到底有多慘?| 碼書

  • 這份“插件英雄榜Top20”才是Chrome的正確打開方式!

  • 劇情反轉! 創始人去世事件再爆新料, 1.8億美元難道去了天堂?


喜歡就點擊“好看”吧

總結

以上是生活随笔為你收集整理的数据解读京东上最受欢迎的面包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。