【问题标题】:Scrape currently opened webpage or get live HTML with another method?抓取当前打开的网页或使用其他方法获取实时 HTML?
【发布时间】:2017-03-12 13:06:44
【问题描述】:

我需要从仅在您登录网站时出现的 HTML 标记中获取一些数据。我需要用 Python 或 Javascript 来做。 Javascript 有跨域浏览器策略(CORS)作为障碍。

我不能使用服务器端代码。 我不能使用 iframe。

如果您在 Chrome 或 FireFox 中打开页面 URL,则数据很容易获得,因为它可以让您保持登录状态,就像 Facebook 一样,因此我们将使用它作为示例。我们会说我想从我的 Facebook 新闻提要的第一个元素中获取数据。

我尝试过抓取网页并使用 Python 的 urllib 模块传入用户代理值。我尝试使用带有 Javascript 的 Yahoos YQL 工具。两者都返回了我想要的 HTML,但没有我需要的值。这是因为它没有使用我的浏览器来执行此操作,它存储了填充我需要的值所需的 cookie。

那么有没有办法抓取已经打开的网页?假设我打开了 Facebook,我运行了一些代码,从浏览器中获取了我的新闻提要数据。

还有其他我没有提到的方法来完成这个吗?

背景:我正在为一个论坛(在网站规则内)创建一个自动缓冲器,并且需要从网站 HTML 中生成一些值,但不会得到所有者的合作。

【问题讨论】:

  • 服务器端代码完全有可能支持 cookie,从而支持包括登录流程的多页会话。
  • @ceejayoz 如果我绝对不能按照我描述的方式去做,我可能会诉诸类似的事情。那怎么办?

标签: javascript python jquery html


【解决方案1】:

您可以使用 python selenium webdriver 尝试以下操作,因为它允许您登录并获取 html 源代码。

您必须先 pip install selenium 并从 selenium 网站http://docs.seleniumhq.org/ 下载 chromedriver.exe

这是我在 gmail 上使用的示例代码:

from selenium import webdriver

#you have to download the chromedriver from selenium hq homepage
chromedriver_path = r'your chromedriver.exe path here'
#create webdriver object and get url
driver = webdriver.Chrome(chromedriver_path)
driver.implicitly_wait(1)
driver.get('https://www.google.com/gmail')

#login
driver.find_element_by_css_selector('#Email').send_keys('email@gmail.com')
driver.find_element_by_css_selector('#next').click()
driver.find_element_by_css_selector('#Passwd').send_keys('1234')
driver.find_element_by_css_selector('#signIn').click()


#get html
html = driver.page_source

【讨论】:

  • 这太棒了。但是,它需要我登录用户,我不想处理,而且还有两因素身份验证,所以我不知道它是否能正常工作。有没有办法做到这一点,但使用完整的 cookie 浏览器?这样用户就可以登录到他们的浏览器,而不必将他们的详细信息放入程序中。或者这是否需要我登录用户?听起来它可能使用谷歌浏览器,也许在驱动程序中。
  • 我对此不是很熟悉,但是您可以尝试使用 selenium 获取 url,然后手动登录 2 因素身份验证。之后,您可以尝试保存 cookie。
猜你喜欢
  • 2014-06-11
  • 2018-09-15
  • 2017-08-20
  • 1970-01-01
  • 2011-07-09
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多