Python 在AJAX请求完成后对页面进行刮取

Python 在AJAX请求完成后对页面进行刮取,python,ajax,beautifulsoup,Python,Ajax,Beautifulsoup,我在刮: http://www.wotif.com/hotel/View?hotel=W3830&page=1&adults=2&startDay=2014-11-08&region=1&descriptionSearch=true#property-reviews 使用以下代码: hotel_page = requests.get(hotel_url).text hotel_page_soup = BeautifulSoup(hotel_page)

我在刮:

http://www.wotif.com/hotel/View?hotel=W3830&page=1&adults=2&startDay=2014-11-08&region=1&descriptionSearch=true#property-reviews
使用以下代码:

hotel_page  = requests.get(hotel_url).text
hotel_page_soup = BeautifulSoup(hotel_page)
但是,这不包括该部分,因为它是在页面加载后由AJAX调用加载的


问题:只有在所有AJAX调用完成后,我如何才能刮取页面?这要简单得多。如果您请求URL
http://www.wotif.com/review/fragment.json?propertyId=W3830&limit=100&bestThing=True
您可以获得json格式的所有评论

URL
http://www.wotif.com/review/fragment?propertyId=W3830&limit=100&
以嵌入json的html格式提供评论。您必须审视自己,什么最适合您的需要。

您需要调用此函数,并确保
X-request-With
XMLHttpRequest

URL="http://www.wotif.com/review/fragment?propertyId=W3830&limit=5"

headers={"X-Requested-With":"XMLHttpRequest",
"User-Agent":"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"}

r=requests.get(URL,headers=headers)

#response here will be in json format
#Page source can be extracted using key `html'`
response=r.json()['html']
soup=BeautifulSoup(response)
reviews=soup.find(class_="review-score review-score-large").text
print reviews

Out[]:u'\n\n4.4\nOut of 5\n\n\n'

print reviews.strip()

Out[]:u'4.4\nOut of 5'

如果您访问
http://www.wotif.com/review/fragment.json?propertyId=W3830&limit=100&bestThing=True
您将看到审核日期和审核分数。。。但是在JSON响应中。。它们不可用…但每次只能加载
5
客人评论。。。我必须把这个放到循环中才能得到所有reviews@Umair那么这有什么问题呢?你也是这样做的。我回答了你的问题-如果你需要更多,那么请相应地更改你的问题,我会回答你的问题你刮错了网址。。。在我的问题中。。。我想在它完成AJAX@Umair之后再去刮它,这是刮AJAX的方法。当我们使用浏览器时,它们被很好地用来使用javascript和/或重定向到多个URL并获取数据。当使用请求时,您需要手动切换它们,或者让python知道切换到它们的逻辑。我没有刮错网址-这是刮的方式。我想您需要进一步了解AJAX请求。请使用Chrome的“网络”选项卡观察这些问题。您是否能够解决此问题?我也有同样的问题