webcrawling-使用javascript加载检测页面的一些可能方法是什么?

时间:2018-03-15 19:10:53

标签: web-crawler

我想抓取一些网站。我使用selenium / PhantomJS来抓取JS(react,angular,jquery等)和python来抓取其他所有内容。

我的主要问题是我无法区分是否使用JS加载页面。

欢迎任何想法!

1 个答案:

答案 0 :(得分:0)

页面被加载"的想法或者"完成"是一个模糊的。 一般来说,没有办法知道。 Web应用程序很复杂,任何时候都可以随时改变。

但除非您尝试构建通用网站索引器,否则谷歌可能不是您需要解决的问题。相反,您需要解决此问题。可能意识到为什么你在某个特定页面上,因此你希望 在那里。你应该能够做真正的用户所做的事情:等待一些有意义的数据出现在屏幕上,例如,页面标题或一些正文:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.by import By
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)

driver.get("http://www.example.com")

wait.until(
    EC.text_to_be_present_in_element(
        (By.CSS_SELECTOR, "p"),
        "to be used for illustrative examples"))

link = driver.find_element_by_partial_link_text("More information")
link.click()

wait.until(
    EC.text_to_be_present_in_element(
        (By.CSS_SELECTOR, "h1"),
        "IANA-managed Reserved Domains"))    

capybara-py实际上使这种同步非常简单和透明:

import capybara
from capybara.dsl import page

capybara.current_driver = "selenium"

page.visit("http://www.example.com")
page.assert_text("to be used for illustrative examples")
page.click_link("More information")
page.assert_text("IANA-managed Reserved Domains")