2017-03-28 11 views
0

私はhttps://www.tripadvisor.com/Hotel_Review-g60763-d2173604-Reviews-Dream_Downtown-New_York_City_New_York.htmlからレビューを取得しようとしています。レビューをもっとクリックすると必要なAJAXリクエストのようです。https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Reviewです。私はすべてのデータを正しく解析できるように、xhr投稿要求をどのように取得するのですか?ここに私のコードは次のとおりです。治療/要求シミュレーションXHR

# -*- coding: utf-8 -*- 
import scrapy 

def parse(self, response): 
    url = 'https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review' 
    headers = {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8', 
       'Accept-Encoding':'gzip, deflate, br', 
       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
       'X-Requested-With':'XMLHttpRequest'} 
    req = scrapy.Request(url,method='POST',body='{"filters": []}',headers=headers,callback=self.parse_me) 
    yield req 
def parse_me(self,response): 
    print(response.body) 

はまた、私はそうレビューをすべて取得するには、これが唯一の「より多くの」オプションを持っているのリストが含まれて気づいた私の最善の策は、このような何かをすることです:

if 'more' is present: 
    do xhr request 
else: 
    pass 

可能であれば、私は治療に慣れていて、依然として私がよく知っているリクエストモジュールの対応する答えを見つけられなかったので、リクエストに対する解決をしたいと思います。私はいつも離れたいと思っているセレンを使います。ありがとう。

+0

具体的な質問は何ですか? –

+0

@PeterHenell私は、セレンを使用してページのソースからより多くをクリックする代わりに、そこからレビューデータを得ることができるように、xhr投稿要求をどのように持ち込むかを考え出しています。私はこれを行う方法を完全にはわかっていないし、現在のヘッダーは私に404を与える – Tyshawn

答えて

0

私はthis URLから始まりました。

私の見る限り、各レビューにはクリック可能なタイトルがあります。それは完全なレビューにつながるURLを持っています。たとえば、「!現代、クリーン、優秀なスタッフを」クリック私は、URLを取得します:

https://www.tripadvisor.com/ShowUserReviews-g60763-d224214-r470551868-The_Bryant_Park_Hotel-New_York_City_New_York.html#CHECK_RATES_CONT

ラッパーにあなたができるだけでループだけでなく、各レビューのタイトルのURLを取得します。

これは片道です。


私は「もっと」をクリックして、ネットワークに点検したときに別の方法がある> XHR、私はこのURLを取得する:

https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review&reviews=470551868,470078957,469616995,469417970

注、これは、複数のレビューを持っている - の数字に注目してください終わり。私たちは1つ以上を持つことができます。例えば、一つだけの数を維持することにより、上記と同じ評価を得るために:

https://www.tripadvisor.com/OverlayWidgetAjax?Mode=EXPANDED_HOTEL_REVIEWS&metaReferer=Hotel_Review&reviews=470551868

さて、質問は今、私たちは、この最後の番号を取得することができますどこからですか?あなたは属性data-reviewidでそれを見つけることができ、最初の方法で上記のURLで見つけることさえできます。