python京東登り商品レビュー(json)

2398 ワード

Pythonネットワークの爬虫に必要なモジュール今回の爬虫プログラムに必要なモジュールはrequest,urllib,json以下でこれらのモジュールの用途をそれぞれ紹介する
requestモジュールはrequest(requests)モジュールを利用して、ページを登るhtmlコンテンツを取得することができます.requestを使用すると、対応するWebページの接続を返し、呼び出すことができます.textまたは.contentは、対応するWebページhtmlコンテンツを取得します.そのうちtextは文字列の形式でウェブページの内容を返す.contentは、Webコンテンツをバイナリバイトで反転させ、両者には異なる用途があります.例えば.textが返すページの内容には、符号化フォーマットが間違っていることによる文字化けしの問題などが発生します.——————————————————jsonモジュールがjsonを使用するのは、這い出したコメントページをPythonの扱いやすい辞書形式に解析するためであり、jsonはある.load()と.loads(),dump()およびdumps().loads()はjson形式をPythonの扱いやすい辞書形式に変換する.一方dumps()メソッドはPythonの辞書フォーマットをjsonフォーマットに変換する.
————————————————
# __author:   han-zhang
# date:  2019/8/16 18:02

import urllib.request
import json, jsonpath

start_page = int(input('start_page:'))
end_page = int(input('end_page:'))
for p in range(start_page, end_page + 1):
    url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv995&productId=1981570&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1'
    url = url.format(p)
    #     ,     
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
        'Referer': 'https://item.jd.com/1981570.html'
    }
    #    
    request = urllib.request.Request(url=url, headers=headers)
    #    
    content = urllib.request.urlopen(request).read().decode('gbk')
    #      json  
    content = content.strip('fetchJSON_comment98vv995();')
    # print(content)
    obj = json.loads(content)

    comments = obj['comments']
    # print(comments)
    fp = open('jingdong.txt', 'a', encoding='gbk')
    for comment in comments:
        # print(comment)
        name = comment['referenceName']

        id = comment['id']

        con = comment['content']

        time = comment['creationTime']

        img_url = comment['userImageUrl']

        item = {
            'name': name,
            'id': id,
            'con': con,
            'time': time,
            'img_url': img_url,
        }
        string = str(item)
        fp.write(string + '
') fp.close() print('%s-page---finish' % p)