gpt4 book ai didi

python - Web 在 url 保持不变时抓取多个页面(但给出了 ajax 响应)

转载 作者:可可西里 更新时间:2023-11-01 15:02:06 25 4
gpt4 key购买 nike

我正在尝试通过网络抓取 Goodreads.com 上某本书的所有评论。

url= https://www.goodreads.com/book/show/320.One_Hundred_Years_of_Solitude?ac=1&from_search=true

这对于使用 python 和 Beautiful Soup 的第一页非常成功,但我的问题是试图抓取后续页面的评论。我遇到问题是因为生成的每个新页面都有相同的 url(所以我只在第 1 页上获得评论)。当我检查 html 时,新页面似乎是通过 ajax 请求生成的。

<a class="previous_page" href="#" onclick="new Ajax.Request('/book/reviews/320.One_Hundred_Years_of_Solitude?authenticity_token=sZXyhbZUmjF0yvXFy3p2w3PllReMI02adUUeA5yOHzvY1ypaIv1z9e70UMgH1mDpx5FHr%2FakQ4rG7Ge5ZoD6zQ%3D%3D&amp;amp;hide_last_page=true&amp;amp;page=1', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('4sfXlAmAjNZyCOAnywx+OVJZ1rHkR3E065/m/pbsTC6LhQ9LnSllEug2RSoHoGgT5i0ECZ7AfyRYNp9EbOKp2A==')}); return false;">« previous</a>

我对一般的网络抓取非常陌生,不知道如何从中获取我需要的信息。任何指向正确方向的点都会很棒。

谢谢

最佳答案

如果您要“驱动”网页,那么我建议您使用网络驱动程序。 https://www.seleniumhq.org/projects/webdriver/

网络驱动程序可以打开一个“ headless ”浏览器,您可以使用 Selenium 的 API 对其进行操作。例如,在这种情况下,您可以通过以下方式打开浏览器并导航至您的页面:

from selenium import webdriver
browser = webdriver.Firefox() # open a browser
browser.get("https://www.goodreads.com/book/show/320.One_Hundred_Years_of_Solitude?ac=1&from_search=true") # open your webpage

现在您的浏览器对象在您正在处理的页面上。您可以使用 browser.page_source 获取 html,然后对其进行 soup:

html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')

然后你就可以用你的汤做任何你想做的事了。当您准备好获取下一页评论时,您可以告诉您的浏览器单击按钮,等待一秒钟加载,然后再次获取汤:

element = browser.find_element_by_id("your_element_id")
element.click()
time.sleep(3) # sleep three seconds so page can load

html = browser.page_source # now this has new reviews on it
soup = BeautifulSoup(html, 'html.parser') # now you have soup again, but with new reviews

您可以将此过程置于循环中,直到不再有“下一页”元素出现为止。

关于python - Web 在 url 保持不变时抓取多个页面(但给出了 ajax 响应),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com