有没有一种方法可以使用BeautifulSoup从网页中提取CSS?

时间:2020-09-13 02:33:48

标签: python html python-3.x web-scraping beautifulsoup

我正在做一个项目,该项目需要我查看网页,但是要进一步使用HTML,我必须完全看到它,而不是像一堆行与图片混在一起。有没有一种方法可以使用BeautifulSoup解析CSS和HTML?

这是我的代码:

from bs4 import BeautifulSoup


def get_html(url, name):
    r = requests.get(url)
    r.encoding = 'utf8'
    return r.text


link = 'https://www.labirint.ru/books/255282/'
with open('labirint.html', 'w', encoding='utf-8') as file:
    file.write(get_html(link, '255282'))

警告:页面https://www.labirint.ru/books/255282/重定向到https://www.labirint.ru/books/733371/

1 个答案:

答案 0 :(得分:2)

如果您的目标是真正解析CSS:

美丽的汤将拉动整个页面-它确实包含标题,样式,脚本,在CSS和JS中链接的等等。我之前在pythonCodeArticle中使用了该方法,并针对提供的链接对其进行了重新测试。

import requests
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin

# URL of the web page you want to extract
url = "ENTER YOUR LINK HERE"

# initialize a session & set User-Agent as a regular browser
session = requests.Session()
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"

# get the HTML content
html = session.get(url).content

# parse HTML using beautiful soup
soup = bs(html, "html.parser")
print(soup)

通过查看汤的输出(很长,我不会在这里粘贴)..您可以看到它是一个完整的页面。只需确保粘贴您的特定链接

现在,如果您想解析结果以提取所有css url ...,则可以添加以下内容:(我仍在使用上面非常详细介绍的python代码文章链接中的部分代码)

# 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)
print(css_files)

输出css_files将是所有css文件的列表。现在,您可以分别访问它们,并查看正在导入的样式。

注意:这个特定的网站混合了html内联的样式(即,他们并不总是使用css来设置样式属性...有时,样式位于html内容之内。)

这应该让您入门。