ホームページ  >  記事  >  バックエンド開発  >  淘宝網のコメントを取得する例を取り上げて、Ajax (クラシック) によって動的に生成されたデータを Python がどのようにクロールするかを説明します。

淘宝網のコメントを取得する例を取り上げて、Ajax (クラシック) によって動的に生成されたデータを Python がどのようにクロールするかを説明します。

不言
不言オリジナル
2018-04-18 11:14:433939ブラウズ

Python を学習すると、Web サイトのコンテンツが Ajax の動的リクエストと非同期更新によって生成された JSON データである状況に必ず遭遇します。また、Python を通じて静的な Web コンテンツをクロールする以前の方法は不可能です。そこで、この記事ではその方法について説明します。 Python で ajax によって動的に生成されたデータをクロールします。

Python を学習すると、Web サイトのコンテンツが Ajax の動的リクエストと非同期更新によって生成された JSON データである状況に必ず遭遇し、Python を介して静的な Web コンテンツをクロールする以前の方法は不可能であるため、この記事ではこの記事について説明しますPython で Ajax によって動的に生成されたデータをクロールする方法。

静的Webコンテンツの読み方については、興味のある方はこの記事の内容をご覧ください。

ここでは、淘宝網のコメントをクロールする例を取り上げ、その方法を説明します。

これは主に 4 つのステップに分かれています:

まず、淘宝網のレビューを取得するときに、Ajax はリンク (URL) をリクエストします

次に、Ajax リクエストによって返された JSON データを取得します

3、Pythonを使用してjsonデータを解析します

4 解析結果を保存します

ステップ1:

淘宝のコメントを取得するとき、Ajaxリクエストリンク(URL) ここではChromeブラウザを使用します完了します。 Taobao リンクを開き、検索ボックスで商品を検索します (例: 「靴」)。ここでは最初の商品を選択します。

その後、新しい Web ページにジャンプします。ここでは、ユーザー レビューをクロールする必要があるため、[累積評価] をクリックします。

次に、図に示すように、Web ページを右クリックしてレビュー要素を選択し (または F12 を使用して直接開き)、[ネットワーク] オプションを選択します。写真内:

ユーザーのコメントで、一番下までスクロールし、次または 2 番目のページをクリックすると、ネットワークに動的に追加された項目が list_detail_rate.htm?itemId= で始まります。 35648967399。

次に、このオプションをクリックすると、右側のオプションボックスにリンクに関する情報が表示されます。リクエストURLのリンクコンテンツをコピーします。

取得した URL リンクをブラウザのアドレス バーに入力すると、ページが必要なデータを返しますが、JSON データであるため非常に乱雑に見えます。

2 ajaxリクエストで返されるjsonデータを取得する

次に、URL内のjsonデータを取得します。私が使用する Python エディターは pycharm です。Python コードを見てみましょう:

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
url='https://rate.tmall.com/list_detail_rate.htm?itemId=35648967399&spuId=226460655&sellerId=1809124267ℴ=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=011UW5TcyMNYQwiAiwQRHhBfEF8QXtHcklnMWc%3D%7CUm5OcktyT3ZCf0B9Qn9GeC4%3D%7CU2xMHDJ7G2AHYg8hAS8WKAYmCFQ1Uz9YJlxyJHI%3D%7CVGhXd1llXGVYYVVoV2pVaFFvWGVHe0Z%2FRHFMeUB4QHxCdkh8SXJcCg%3D%3D%7CVWldfS0RMQ47ASEdJwcpSDdNPm4LNBA7RiJLDXIJZBk3YTc%3D%7CVmhIGCUFOBgkGiMXNwswCzALKxcpEikJMwg9HSEfJB8%2FBToPWQ8%3D%7CV29PHzEfP29VbFZ2SnBKdiAAPR0zHT0BOQI8A1UD%7CWGFBET8RMQszDy8QLxUuDjIJNQA1YzU%3D%7CWWBAED4QMAU%2BASEYLBksDDAEOgA1YzU%3D%7CWmJCEjwSMmJXb1d3T3JMc1NmWGJAeFhmW2JCfEZmWGw6GicHKQcnGCUdIBpMGg%3D%3D%7CW2JfYkJ%2FX2BAfEV5WWdfZUV8XGBUdEBgVXVJciQ%3D&isg=82B6A3A1ED52A6996BCA2111C9DAAEE6&_ksTS=1440490222698_2142&callback=jsonp2143' #这里的url比较长
content=requests.get(url).content

print content #印刷されたコンテンツは、以前 Web ページから取得した JSON データです。ユーザーのコメントを含めます。

ここのコンテンツは必要な json データです。次のステップは、これらの json データを解析することです。

3 Python を使用して json データを解析する

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
import json
import re
url='https://rate.tmall.com/list_detail_rate.htm?itemId=35648967399&spuId=226460655&sellerId=1809124267ℴ=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=011UW5TcyMNYQwiAiwQRHhBfEF8QXtHcklnMWc%3D%7CUm5OcktyT3ZCf0B9Qn9GeC4%3D%7CU2xMHDJ7G2AHYg8hAS8WKAYmCFQ1Uz9YJlxyJHI%3D%7CVGhXd1llXGVYYVVoV2pVaFFvWGVHe0Z%2FRHFMeUB4QHxCdkh8SXJcCg%3D%3D%7CVWldfS0RMQ47ASEdJwcpSDdNPm4LNBA7RiJLDXIJZBk3YTc%3D%7CVmhIGCUFOBgkGiMXNwswCzALKxcpEikJMwg9HSEfJB8%2FBToPWQ8%3D%7CV29PHzEfP29VbFZ2SnBKdiAAPR0zHT0BOQI8A1UD%7CWGFBET8RMQszDy8QLxUuDjIJNQA1YzU%3D%7CWWBAED4QMAU%2BASEYLBksDDAEOgA1YzU%3D%7CWmJCEjwSMmJXb1d3T3JMc1NmWGJAeFhmW2JCfEZmWGw6GicHKQcnGCUdIBpMGg%3D%3D%7CW2JfYkJ%2FX2BAfEV5WWdfZUV8XGBUdEBgVXVJciQ%3D&isg=82B6A3A1ED52A6996BCA2111C9DAAEE6&_ksTS=1440490222698_2142&callback=jsonp2143'
cont=requests.get(url).content
rex=re.compile(r'\w+[(]{1}(.*)[)]{1}')
content=rex.findall(cont)[0]
con=json.loads(content,"gbk")
count=len(con['rateDetail']['rateList'])
for i in xrange(count):
  print con['rateDetail']['rateList'][i]['appendComment']['content']

分析:

ここで必要なパッケージをインポートする必要があります。re は正規表現に必要なパッケージで、json データを解析しますjson をインポートする必要があります

cont=requests.get(url).content #Web ページ内の json データを取得します

rex=re.compile(r'w+[(]{1}(.*)[)]{ 1}') #正規表現を削除 contデータの冗長部分は、実際のjson形式のデータとなるデータです {"a":"b","c":"d"}

con=json.loads( content,"gbk") json を使用して、loads 関数はコンテンツのコンテンツを json ライブラリ関数で処理できるデータ形式に変換します。win システムのデフォルトは gbk

count です。 =len(con['rateDetail']['rateList']) # ユーザーのコメント数を取得します (ここでは現在のページのみ)

for i in xrange(count):

print con['rateDetail'] ['rateList'][i]['appendComment']

#ループトラバーサル ユーザーのコメントと出力 (必要に応じてデータを保存することもできます。4 番目の部分を確認できます)

ここでの困難はパスを見つけることです乱雑な JSON データ内のユーザー コメントの数

IV 解析結果を保存します

ここで、ユーザーはユーザーのコメント情報を csv 形式で保存するなど、ローカルに保存できます。

この記事は以上です。皆さんに気に入っていただければ幸いです。

以上が淘宝網のコメントを取得する例を取り上げて、Ajax (クラシック) によって動的に生成されたデータを Python がどのようにクロールするかを説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。