我正在尝试从“烂番茄”网站上刮取电影评论。下面的movie就是一个例子。
如果是的话,这是一个动态网页,因为当我尝试转到评论的下一页时,该网站的URL不会更改,并且页面也不会刷新。而且,随后,当我尝试使用scrappy正常进行网页抓取时,我只能获得该第一页的评论。
我还是Web抓取和Selenium的初学者。我已经按照在线教程(Scraping a JS-Rendered Page)尝试了以下代码:
display: flex;
我希望在第二页上看到评论,但是它仍然只显示第一页的评论。我应该怎么做才能使所有评论都超出首页?
答案 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的模式,并可以抓取详细信息。