Python爬取京東手機評論資訊
阿新 • • 發佈:2022-03-13
程式碼如下:
1 # coding='utf-8' 2 import requests 3 import json 4 import time 5 import random 6 import xlwt 7 import xlutils.copy 8 import xlrd 9 10 11 def start(page): 12 # 獲取URL 13 # score 評價等級 page=0 第一頁 producitid 商品類別 14 # url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100014348492&score=0&sortType=5&page=&pageSize=10&isShadowSku=0&fold=1'15 url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100014348492&score=0&sortType=5&page='+str(page)+'&pageSize=3100&isShadowSku=0&fold=1' 16 17 headers = { 18 "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36" 19 } 20 time.sleep(2) 21 test = requests.get(url=url, headers=headers) 22 t = test.text 23 data = json.loads(t.lstrip('fetchJSON_comment98vv12345(').rstrip(');')) 24 # data = json.loads(test) 25 return data 26 # 解析頁面 27 28 29 def parse(data): 30 items = data['comments'] 31 for i in items: 32 yield ( 33 i['id'], # 使用者id 34 i['guid'], 35 i['content'], # 內容 36 i['creationTime'], # 時間 37 i['isTop'], 38 i['referenceTime'], 39 i['firstCategory'], 40 i['secondCategory'], 41 i['thirdCategory'], 42 i['replyCount'], 43 i['score'], 44 i['nickname'], 45 i['userClient'], 46 i['productColor'], 47 i['productSize'], 48 i['plusAvailable'], 49 i['productSales'], 50 i['days'], 51 i['afterDays'] 52 ) 53 54 55 def excel(items): 56 # 第一次寫入 57 newTable = "jingdong.csv" # 建立檔案 58 wb = xlwt.Workbook("encoding='utf-8") 59 60 ws = wb.add_sheet('sheet1') # 建立表 61 headDate = ['id', 'guid', '內容', '時間', 'isTop', 'referenceTime', 'firstCategory', 'secondCategory', 'thirdCategory', 62 'replyCount', 'score', 'nickname', 'userClient', 'productColor', 'productSize', 63 'plusAvailable', 'productSales', 'days', 'afterDays'] # 定義標題 64 for i in range(0, 19): # for迴圈遍歷寫入 65 ws.write(0, i, headDate[i], xlwt.easyxf('font: bold on')) 66 67 index = 1 # 行數 68 69 for data in items: # items是十條資料 data是其中一條(一條下有三個內容) 70 for i in range(0, 19): # 列數 71 print(data[i]) 72 ws.write(index, i, data[i]) # 行 列 資料(一條一條自己寫入) 73 print('______________________') 74 index += 1 # 等上一行寫完了 在繼續追加行數 75 wb.save(newTable) 76 77 78 def another(items, j): # 如果不是第一次寫入 以後的就是追加資料了 需要另一個函式 79 80 index = (j - 1) * 10 + 1 # 這裡是 每次寫入都從11 21 31..等開始 所以我才傳入資料 代表著從哪裡開始寫入 81 82 data = xlrd.open_workbook('jingdong.csv') 83 ws = xlutils.copy.copy(data) 84 # 進入表 85 table = ws.get_sheet(0) 86 87 for test in items: 88 89 for i in range(0, 19): # 跟excel同理 90 print(test[i]) 91 92 table.write(index, i, test[i]) # 只要分配好 自己塞入 93 print('_______________________') 94 95 index += 1 96 ws.save('jingdong.csv') 97 98 99 def main(): 100 j = 1 # 頁面數 101 judge = True # 判斷寫入是否為第一次 102 103 for i in range(0, 300): 104 time.sleep(1.5) 105 # 記得time反爬 其實我在爬取的時候沒有使用代理ip也沒給我封 不過就當這是個習慣吧 106 first = start(j) 107 test = parse(first) 108 109 if judge: 110 excel(test) 111 judge = False 112 else: 113 another(test, j) 114 print('第' + str(j) + '頁抓取完畢\n') 115 j = j + 1 116 117 118 if __name__ == '__main__': 119 main() 120 # 這個程式碼僅為全部資料下的評論而已 中差評等需要修改score!
效果圖: