【问题标题】:Download entire webpage (html, image, JS) by Selenium Python通过 Selenium Python 下载整个网页(html、图像、JS)
【发布时间】:2018-01-29 11:41:44
【问题描述】:

我必须以简单的 HTML 格式下载像 www.humkinar.pk 这样的网站的源代码。网站内容是动态生成的。我尝试了seleniumdriver.page_source 功能,但它没有完全下载页面,例如留下图像和javascript文件。我怎样才能下载完整的页面。 python中有没有更好更简单的解决方案?

【问题讨论】:

  • 您使用什么网络驱动程序?什么浏览器?
  • 我正在使用 Chrome

标签: javascript python html selenium web-scraping


【解决方案1】:

使用硒

我知道你的问题是关于硒的,但根据我的经验,我告诉你硒被推荐用于测试用于抓取。这是非常。即使有多个无头浏览器实例(适合您的情况的 chrome),结果也会延迟太多。

推荐

Python 2、3

这三者将帮助您很多,并为您节省大量时间。

不要使用dryscrape的解析器,它很慢而且有问题。为了 在这种情况下,可以将 BeautifulSoup 与 lxml 解析器一起使用。使用 dryscrape 抓取 Javascript 生成的内容、纯 HTML 和图像。

如果您同时抓取大量链接,我强烈推荐 使用类似 ThreadPoolExecutor 的东西

编辑#1

dryscrape + BeautifulSoup 用法(Python 3+

from dryscrape import start_xvfb
from dryscrape.session import Session
from dryscrape.mixins import WaitTimeoutError
from bs4 import BeautifulSoup

def new_session():
    session = Session()
    session.set_attribute('auto_load_images', False)
    session.set_header('User-Agent', 'SomeUserAgent')
    return session


def session_reset(session):
    return session.reset()


def session_visit(session, url, check):
    session.visit(url)
    # ensure that the market table is visible first
    if check:
        try:
            session.wait_for(lambda: session.at_css(
                'SOME#CSS.SELECTOR.HERE'))
        except WaitTimeoutError:
            pass
    body = session.body()
    session_reset(session)
    return body

# start xvfb in case no X is running (server)
start_xvfb()

SESSION = new_session()
URL = 'https://stackoverflow.com/questions/45796411/download-entire-webpage-html-image-js-by-selenium-python/45824047#45824047'
CHECK = False

BODY = session_visit(SESSION, URL, CHECK)
soup = BeautifulSoup(BODY, 'lxml')

RESULT = soup.find('div', {'id': 'answer-45824047'})

print(RESULT)

【讨论】:

    【解决方案2】:

    我希望下面的代码可以下载页面的完整内容。

    driver.get("http://testurl.com")
    pageurl=driver.current_url
    page = requests.get(pageurl)
    pagecontent=page.content
    
    `pagecontent` will contain the complete code content
    

    【讨论】:

      【解决方案3】:

      未经许可不得下载网站。如果您知道这一点,您也会知道托管服务器上有隐藏的代码,您作为访客无法访问它。

      【讨论】:

      • 如果我可以访问托管服务器,那么有可能吗?
      猜你喜欢
      • 2014-09-03
      • 2019-03-12
      • 1970-01-01
      • 2017-08-11
      • 2013-05-12
      • 2017-05-12
      • 2015-07-27
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多