用python的requests庫爬取京東某商品的評論並存儲到MongoDB

用python的requests庫爬取京東某商品的評論內容,評論有用數及時間,並將結果存到MongoDB

**1、**首先打開所選商品的詳情頁面,此處以https://item.jd.com/2922989.html爲例,打開chrome開發者工具,點擊商品評價,在某項評論中找一個關鍵字(此處以logo爲關鍵字),使用chrome開發者工具中的Search功能,輸入後找到包含該關鍵字的文件,文件中記錄了該評論的詳細信息,如下圖所示。在這裏插入圖片描述
**2、**找到該文件後提取關鍵字fetchJSON_comment,切換到Network,搜索該關鍵字可以得到該文件,發現其爲JS文件,點擊該文件後我們可以看到所需要的數據在comments中。
在這裏插入圖片描述
接着切換到Headers,可以得到我們請求到該文件的URL爲:https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv420545&productId=2922989&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1

通過點擊多頁得到的URL分析可知,該URL中變化的部分爲page字段,其對應的就是頁碼數。要想從存儲數據的文件中國提取到我們想要的數據,需對此URL中一些參數進行處理,經處理後得到一個簡縮版的URL爲:https://sclub.jd.com/comment/productPageComments.action?productId=2922989&score=0&sortType=5&page={“此爲頁碼數”}&pageSize=10 ,此時該URL返回的數據是一個json數據格式,分析完畢後啓動pycharm創建項目,具體代碼如下:
主程序:jingdong.py

from  config import *
import json
import pymongo
import requests

client = pymongo.MongoClient(MONGO_URL, connect=False)

class JingDongSprider():
    def __init__(self):
        self.url_temp="https://sclub.jd.com/comment/productPageComments.action?productId=2922989&score=0&sortType=5&page={}&pageSize=10"
        self.headers={"User-Agent":set_user_agent()}

    def get_url_list(self):
        return [self.url_temp.format(i) for i in range(0,2)]#此處只抓取前兩頁評論

    def parse_url(self,url):
        response=requests.get(url,headers=self.headers)
        return response.text

    def get_content_list(self,json_str):
        dirt_ret = json.loads(json_str)
        content_list=dirt_ret["comments"]
        if content_list:
            for content in content_list:
                comment = {}
                comment['content'] = content['content']#評論內容
                comment['usefulVoteCount'] = content['usefulVoteCount']#評論有用數
                comment['creationTime'] = content['creationTime']#評論發佈時間
                self.save_to_mongo(comment)

    def save_to_mongo(self,comment_list):#存儲數據
        db = client[taget_DB]
        if db[taget_TABLE].update_one(comment_list, {'$set': comment_list}, upsert=True):
            print('Successfully Saved to Mongo', comment_list)

    def run(self):
        #1.url_list
        url_list=self.get_url_list()
        #2.遍歷,發送請求,獲取響應
        for url in url_list:
            html_str=self.parse_url(url)
            #3.提取數據
            self.get_content_list(html_str)

if __name__ == '__main__':
    jingdong=JingDongSprider()
    jingdong.run()


輔助程序:config.py,用於連接MongoDB,及設置隨機請求UA以應對反爬

import random
MONGO_URL = 'localhost'
taget_DB = "JINGDONG"
taget_TABLE = "JINGDONG"

def set_user_agent():
    USER_AGENTS = [
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
        "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
        "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
    ]

    user_agent = random.choice(USER_AGENTS)
    return user_agent

爬取結果如下圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章