Python从网页提取Javascript和CSS文件?本文构建一个使用请求和 BeautifulSoup 从 Python 网页中提取所有 Javascript 和 CSS 文件的工具。
Python如何提取Javascript和CSS?假设你的任务是分析某个网站以检查其性能,并且你需要提取下载网页才能正确加载所需的全部文件,在本教程中,我将通过构建一个 Python 工具来提取所有文件来帮助你完成该任务链接到特定网站的脚本和 CSS 文件链接。
Python提取Javascript和CSS示例解析:我们将使用requests和BeautifulSoup作为 HTML 解析器,如果你的 Python 上没有安装它们,请执行以下操作:
pip3 install requests bs4
让我们首先初始化 HTTP 会话并将用户代理设置为常规浏览器而不是 Python 机器人:
import requests
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin
# URL of the web page you want to extract
url = "http://books.toscrape.com"
# initialize a session
session = requests.Session()
# set the User-agent as a regular browser
session.headers["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
现在要下载该网页的所有 HTML 内容,我们需要做的就是调用session.get()方法,该方法返回一个响应对象,我们只对 HTML 代码感兴趣,而不是整个响应:
# get the HTML content
html = session.get(url).content
# parse HTML using beautiful soup
soup = bs(html, "html.parser")
现在我们有了Soup,让我们提取所有脚本和 CSS 文件,我们使用soup.find_all()方法返回所有使用标签和传递的属性过滤的 HTML Soup对象:
# get the JavaScript files
script_files = []
for script in soup.find_all("script"):
if script.attrs.get("src"):
# if the tag has the attribute 'src'
script_url = urljoin(url, script.attrs.get("src"))
script_files.append(script_url)
因此,基本上我们正在搜索具有src属性的脚本标签,这通常链接到本网站所需的 Javascript 文件。
Python如何提取Javascript和CSS?同样,我们可以使用它来提取 CSS 文件:
# get the CSS files
css_files = []
for css in soup.find_all("link"):
if css.attrs.get("href"):
# if the link tag has the 'href' attribute
css_url = urljoin(url, css.attrs.get("href"))
css_files.append(css_url)
你可能知道,CSS 文件位于链接标签的href属性内。我们使用urljoin()函数来确保链接是绝对链接(即具有完整路径,而不是相对路径,例如/js/script.js)。
最后,让我们打印全部脚本和 CSS 文件并将链接写入单独的文件,如下是Python提取Javascript和CSS示例:
print("Total script files in the page:", len(script_files))
print("Total CSS files in the page:", len(css_files))
# write file links into files
with open("javascript_files.txt", "w") as f:
for js_file in script_files:
print(js_file, file=f)
with open("css_files.txt", "w") as f:
for css_file in css_files:
print(css_file, file=f)
Python从网页提取Javascript和CSS文件?执行后,将出现 2 个文件,一个用于 Javascript 链接,另一个用于 CSS 文件:
css_files.txt
http://books.toscrape.com/static/oscar/favicon.ico
http://books.toscrape.com/static/oscar/css/styles.css
http://books.toscrape.com/static/oscar/js/bootstrap-datetimepicker/bootstrap-datetimepicker.css
http://books.toscrape.com/static/oscar/css/datetimepicker.css
javascript_files.txt
http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
http://books.toscrape.com/static/oscar/js/bootstrap3/bootstrap.min.js
http://books.toscrape.com/static/oscar/js/oscar/ui.js
http://books.toscrape.com/static/oscar/js/bootstrap-datetimepicker/bootstrap-datetimepicker.js
http://books.toscrape.com/static/oscar/js/bootstrap-datetimepicker/locales/bootstrap-datetimepicker.all.js
好的,最后,我鼓励你进一步扩展此代码以构建一个复杂的审计工具,该工具能够识别不同的文件、它们的大小,并可能提出优化网站的建议!
作为挑战,尝试下载所有这些文件并将它们存储在本地磁盘中(本教程可以提供帮助)。
我有另一个教程向你展示如何提取所有网站链接,请在此处查看。
此外,如果你正在分析的网站不小心禁止了你的 IP 地址,则在这种情况下你需要使用代理服务器。