使用 BeautifulSoup 并保持不变 URL 抓取网站
Scraping website using BeautifulSoup with unchanging URL
我之前进行过网络抓取,但在尝试从 RottenTomatoes/search 中抓取时,我 运行 遇到了一些以前从未见过的问题。这个问题是双重的。 (我正在等待我的 API 请求成为 'validated',不幸的是烂番茄没有所有电影的列表,呃)
- 页面右下角有一个 "More Movies" link 必须 "clicked" 才能调出电影。据我所知,Python 没有类似的东西可以与之互动......或者有吗?
- 即使单击 "More Movies" link,当我尝试 navigate/iterate 浏览所有页面时,顶部的 URL 也不会改变。这似乎是 BeautifulSoup.
的问题
任何recommendations/tips?
这确实不能通过使用 beautifulsoup 直接实现,因为 beautifulsoup 处理静态网页。您要抓取的内容正在通过 JavaScript 添加到页面,而不是嵌入到 HTML。
按钮 'More movies' 调用一个 javascript 函数,该函数可能会调用一些 AJAX 函数以获取更多电影。
有几种情况下您可以轻松访问 'more movies':
- 有时数据已经存在于源中,但被隐藏了。 javascript 使它可见
- javascript使用了一个api来加载它的内容,这个APIurl然后可以在源代码中找到,你可以找到你要找的东西因为如果你直接去 link.
然而,上面的 none 似乎是烂番茄的情况。我快速浏览了一下,也许你应该更彻底地调查一下。
我过去使用的解决方案是:Selenium。它有一个易于使用的 python 库,可让您自动执行浏览器行为。这样您就可以 'automatically' 在抓取时单击“加载更多”按钮。
注意 但是,这可能会很慢并且会消耗资源。您可以 运行 它是无头的,这样它就不会打开浏览器并节省一些资源。
我之前进行过网络抓取,但在尝试从 RottenTomatoes/search 中抓取时,我 运行 遇到了一些以前从未见过的问题。这个问题是双重的。 (我正在等待我的 API 请求成为 'validated',不幸的是烂番茄没有所有电影的列表,呃)
- 页面右下角有一个 "More Movies" link 必须 "clicked" 才能调出电影。据我所知,Python 没有类似的东西可以与之互动......或者有吗?
- 即使单击 "More Movies" link,当我尝试 navigate/iterate 浏览所有页面时,顶部的 URL 也不会改变。这似乎是 BeautifulSoup. 的问题
任何recommendations/tips?
这确实不能通过使用 beautifulsoup 直接实现,因为 beautifulsoup 处理静态网页。您要抓取的内容正在通过 JavaScript 添加到页面,而不是嵌入到 HTML。
按钮 'More movies' 调用一个 javascript 函数,该函数可能会调用一些 AJAX 函数以获取更多电影。
有几种情况下您可以轻松访问 'more movies':
- 有时数据已经存在于源中,但被隐藏了。 javascript 使它可见
- javascript使用了一个api来加载它的内容,这个APIurl然后可以在源代码中找到,你可以找到你要找的东西因为如果你直接去 link.
然而,上面的 none 似乎是烂番茄的情况。我快速浏览了一下,也许你应该更彻底地调查一下。
我过去使用的解决方案是:Selenium。它有一个易于使用的 python 库,可让您自动执行浏览器行为。这样您就可以 'automatically' 在抓取时单击“加载更多”按钮。
注意 但是,这可能会很慢并且会消耗资源。您可以 运行 它是无头的,这样它就不会打开浏览器并节省一些资源。