Python網絡爬蟲筆記(五):下載、分析京東P20銷售數據


 (一)  分析網頁

下載下面這個鏈接的銷售數據

https://item.jd.com/6733026.html#comment

1、      翻頁的時候,谷歌F12的Network頁簽可以看到下面的請求。(這里的翻頁指商品評價中1、2、3頁等)

 

從Preview頁簽可以看出,這個請求是獲取評論信息的

2、      對比第一頁、第二頁、第三頁…請求URL的區別

可以發現 page=0、page=1,0和1指的應該是頁數。

第一頁的 request url:沒有這個rid=0& 。 第二、三頁…的request url:多了這個rid=0&

除了上面這2個地方,其他內容都是一樣的。

3、      直接在瀏覽器輸入 復制出來的request url,可以看到評論、顏色、版本、內存信息,代碼將根據這些信息來寫正則表達式進行匹配。

(二)  實現代碼

delayed.py的代碼和我前面發的是一樣的(Python網絡爬蟲筆記(二)),不限速的話把和這個模塊相關的代碼刪除就行了
 1 import urllib.request as ure
 2 import urllib.parse
 3 import openpyxl
 4 import re
 5 import os
 6 from delayed import WaitFor
 7 def download(url,user_agent='FireDrich',num=2,proxy=None):
 8     print('下載:'+url)
 9     #設置用戶代理
10     headers = {'user_agent':user_agent}
11     request = ure.Request(url,headers=headers)
12     #支持代理
13     opener = ure.build_opener()
14     if proxy:
15         proxy_params = {urllib.parse.urlparse(url).scheme: proxy}
16         opener.add_handler(ure.ProxyHandler(proxy_params))
17     try:
18         #下載網頁
19         # html = ure.urlopen(request).read()
20         html = opener.open(request).read()
21     except ure.URLError as e:
22         print('下載失敗'+e.reason)
23         html=None
24         if num>0:
25             #遇到5XX錯誤時,遞歸調用自身重試下載,最多重復2次
26             if hasattr(e,'code') and 500<=e.code<600:
27                 return download(url,num=num-1)
28     return html
29 def writeXls(sale_list):
30     #如果Excel不存在,創建Excel,否則直接打開已經存在文檔
31     if 'P20銷售情況.xlsx' not in os.listdir():
32         wb =openpyxl.Workbook()
33     else:
34         wb =openpyxl.load_workbook('P20銷售情況.xlsx')
35     sheet = wb['Sheet']
36     sheet['A1'] = '顏色'
37     sheet['B1'] = '版本'
38     sheet['C1'] = '內存'
39     sheet['D1'] = '評論'
40     sheet['E1'] = '評論時間'
41     x = 2
42     #迭代所有銷售信息(列表)
43     for s in sale_list:
44         #獲取顏色等信息
45         content = s[0]
46         creationTime = s[1]
47         productColor = s[2]
48         productSize = s[3]
49         saleValue = s[4]
50         # 將顏色等信息添加到Excel
51         sheet['A' + str(x)] = productColor
52         sheet['B' + str(x)] = productSize
53         sheet['C' + str(x)] = saleValue
54         sheet['D' + str(x)] = content
55         sheet['E' + str(x)] = creationTime
56         x += 1
57     wb.save('P20銷售情況.xlsx')
58 
59 page = 0
60 allSale =[]
61 waitFor = WaitFor(2)
62 #預編譯匹配顏色、版本、內存等信息的正則表達式
63 regex = re.compile('"content":"(.*?)","creationTime":"(.*?)".*?"productColor":"(.*?)","productSize":"(.*?)".*?"saleValue":"(.*?)"')
64 #這里只下載20頁數據,可以設置大一些(因為就算沒評論信息,也能下載到一些標簽信息等,所以可以if 正則沒匹配的話就結束循環,當然,下面沒處理這個)
65 while page<20:
66     if page==0:
67         url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv176&productId=6733026&score=0&sortType=5&page=' + str(page) + '&pageSize=10&isShadowSku=0&fold=1'
68     else:
69         url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv176&productId=6733026&score=0&sortType=5&page=' + str(page) + '&pageSize=10&isShadowSku=0&rid=0&fold=1'
70     waitFor.wait(url)
71     html = download(url)
72     html = html.decode('GBK')
73     #以列表形式返回顏色、版本、內存等信息
74     sale = regex.findall(html)
75     #將顏色、版本、內存等信息添加到allSale中(擴展allSale列表)
76     allSale.extend(sale)
77     page += 1
78 
79 writeXls(allSale)

(三)  數據分析

1、      下載后的數據如下圖所示。

 

2、      生成圖表。

 

我的博客即將搬運同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=3ff1njli6hwk0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM