我正在做一个项目,该项目需要我查看网页,但是要进一步使用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/。
答案 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内容之内。)
这应该让您入门。