如何通过网络抓取此动态页面?

时间:2019-06-14 04:14:27

标签: angularjs web-scraping scrapy

我正在尝试从“烂番茄”网站上刮取电影评论。下面的movie就是一个例子。

如果是的话,这是一个动态网页,因为当我尝试转到评论的下一页时,该网站的URL不会更改,并且页面也不会刷新。而且,随后,当我尝试使用scrappy正常进行网页抓取时,我只能获得该第一页的评论。

我还是Web抓取和Selenium的初学者。我已经按照在线教程(Scraping a JS-Rendered Page)尝试了以下代码:

display: flex;

我希望在第二页上看到评论,但是它仍然只显示第一页的评论。我应该怎么做才能使所有评论都超出首页?

2 个答案:

答案 0 :(得分:1)

如果您不熟悉python网络抓取功能,我会为您推荐一本书。

Web Scraping with Python, 2nd Edition

我认为使用requests代替selenium更加轻巧优雅。

以下代码可以为您提供帮助

import time
import requests

headers = {
    'Referer': 'https://www.rottentomatoes.com/m/notebook/reviews?type=user',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}

url = 'https://www.rottentomatoes.com/napi/movie/00d1dd5b-5a41-3248-9080-3ef553dd9015/reviews/user'

payload = {
    'direction': 'next',
    'endCursor': '',
    'startCursor': '',
}

sess = requests.Session()

while True:
    r = sess.get(url, headers=headers, params=payload)
    data = r.json()

    if not data['pageInfo']['hasNextPage']:
        break

    payload['endCursor'] = data['pageInfo']['endCursor']
    payload['startCursor'] = data['pageInfo']['startCursor']

    for x in data['reviews']:
        user = x['user']['displayName']
        review = x['review']
        print(user, review)

    time.sleep(1)

答案 1 :(得分:0)

我不知道你为什么要使用硒。如果您在下次单击时检查元素,则会执行json请求,该请求正在获取详细信息。

对于URL,您提到我单击了下一步,然后可以找到下一个url

也许您可以在URL中找到用于获取下一个URL的模式,并可以抓取详细信息。