【问题标题】:Download entire webpage (html, image, JS) by Selenium Python通过 Selenium Python 下载整个网页(html、图像、JS)
【发布时间】:2018-01-29 11:41:44
【问题描述】:
我必须以简单的 HTML 格式下载像 www.humkinar.pk 这样的网站的源代码。网站内容是动态生成的。我尝试了selenium 的driver.page_source 功能,但它没有完全下载页面,例如留下图像和javascript文件。我怎样才能下载完整的页面。 python中有没有更好更简单的解决方案?
【问题讨论】:
标签:
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】:
未经许可不得下载网站。如果您知道这一点,您也会知道托管服务器上有隐藏的代码,您作为访客无法访问它。