使用Beautiful Soup提取css链接

时间:2015-07-01 14:01:07

标签: python css beautifulsoup

我是Beautiful Soup的新手,我想使用它来提取网站的CSS和JS链接。到目前为止,我已经成功但有一个小缺陷。

from bs4 import BeautifulSoup
import urllib.request

url="http://www.something.com"
page = urllib.request.urlopen(url)

soup = BeautifulSoup(page.read())
for link in soup.find_all('link'):      #Lists out css links
    print(link.get('href'))

使用上面的代码片段,我可以获得所有css文件的链接。但是,我也得到了像favicon这样的其他链接。我是BeautifulSoup的新手,我想知道是否有任何方法可以将其过滤到样式表中。

另外,为了提取JS,如果我在'script'标签上运行一个简单的find_all,我会以非常不整洁的方式获得JS链接以及直接在脚本标记内编写的任何JS。如果我运行类似我的CSS循环,

for link in soup.find_all('script'):        #Lists out all JS links
    print(link.get('src'))

我在脚本标记内的文件中没有编写直接JS的链接。我很确定有更好的方法来提取它,只是我有点困惑。看过这里的href提取链接,对我没什么帮助。

我正在尝试为我尝试使用的所有或大多数网站制作通用代码,因此虽然这对我迄今使用过的网站有效,但有些网站会使用“链接”来解决除了css链接。因此,如果你有一个更通用的逻辑或方法,我可以用它来检索css链接/ JSS链接和网站代码,我将非常感激!

谢谢!

2 个答案:

答案 0 :(得分:2)

找到所有“链接”元素并过滤掉具有此元素rel="stylesheet"的元素。 您可以使用以下内容:

>>> [link["href"] for link in soup.findAll("link") if "stylesheet" in link.get("rel", [])]

我为这个当前的stackoverflow页面运行了上面的代码。 结果:

>>> ['//cdn.sstatic.net/stackoverflow/all.css?v=00635778dbde']

答案 1 :(得分:0)

您可以将extra parameters传递给find_all以进一步过滤您的查询。

尝试:

soup.find_all('link', rel="stylesheet")
soup.find_all('script', src=re.compile(".*"))