Javascript 在Python中刮取动态内容

Javascript 在Python中刮取动态内容,javascript,python,scrapy,Javascript,Python,Scrapy,我是Python Scrapy模块的新手。我在努力搜集餐馆的信息 虽然我有一些成功的经验,在其他网页上刮,这是一个真正的麻烦。 当你发送搜索请求时,餐厅的信息似乎会自动加载。我的意思是信息不是写在网页的源代码中,可能来自公司的内部服务器或其他什么。目录会随着时间而变化。例如,如果您在晚上搜索,某些目录将其名称从“div class='t-has-deals'”更改为“div class='t-closed-now'” 所以我的问题是:是否仍有可能从这些网页中获取信息。如果这个问题属于抓取动态内容

我是Python Scrapy模块的新手。我在努力搜集餐馆的信息

虽然我有一些成功的经验,在其他网页上刮,这是一个真正的麻烦。 当你发送搜索请求时,餐厅的信息似乎会自动加载。我的意思是信息不是写在网页的源代码中,可能来自公司的内部服务器或其他什么。目录会随着时间而变化。例如,如果您在晚上搜索,某些目录将其名称从“div class='t-has-deals'”更改为“div class='t-closed-now'”


所以我的问题是:是否仍有可能从这些网页中获取信息。如果这个问题属于抓取动态内容,有没有一个通用的方法来解决这个问题?非常感谢。

我对scrapy没有把握,所以我不能帮你,但你可以试试。下面的代码应该使用动态生成的内容

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions

driver = webdriver.Firefox()
url = "www.google.com"
driver.get(url)

# If it takes a certain amount of time for the content to be created you can
# use time.sleep
time.sleep(5)

# However if you want to wait for specified content to appear, you 
# can use the following
try:
    WebDriverWait(driver, 10).until(
         expected_conditions.presence_of_element_located(
                            (By.ID, "id-of-your-element")
                                    )
finally:
    driver.quit()

# then you can pull your html
html = driver.page_source

硒也有很大的毒性。这里的大部分代码实际上都可以在文档中找到。

在处理动态站点时,比通常的方式更难抓取数据。但首先我们要确定数据是如何在页面中动态呈现的。 数据可能以以下方式呈现:

  • 来自包含数据的javascript文件
  • 来自ajax响应
  • 来自websocket响应。在这种情况下,我们必须首先发送 向服务器发送的相关消息,该消息向我们提供可能 包含数据
  • 来自api响应

    将会有比我提到的更多的方法。 在您的案例中,数据是从本文档中删除的。 下图显示了我们在请求api\u请求url时需要提供的表单数据

  • 这会给您一个json\u响应如下所示

    其中包含您需要的数据。 如果您更改表单中的参数\u data您将得到相应的数据。

    我希望可以帮助您