我想运行python脚本来解析html文件,并收集具有target="_blank"属性的所有链接的列表。
我尝试了下面的方法,但是没有从bs4得到任何东西。SoupStrainer在文档中说,它将以与findAll等相同的方式获取args,应该这样做吗?我是不是错过了什么愚蠢的错误?
import os
import sys
from bs4 import BeautifulSoup, SoupStrainer
from unipath import Path
def main():
ROOT = Path(os.path.realpath(__file__)).ancestor(3)
src = ROOT.child("src")
templatedir = src.child("templates")
for (dirpath, dirs, files) in os.walk(templatedir):
for path in (Path(dirpath, f) for f in files):
if path.endswith(".html"):
for link in BeautifulSoup(path, parse_only=SoupStrainer(target="_blank")):
print link
if __name__ == "__main__":
sys.exit(main())发布于 2013-07-10 23:44:03
我想你需要这样的东西
if path.endswith(".html"):
htmlfile = open(dirpath)
for link in BeautifulSoup(htmlfile,parse_only=SoupStrainer(target="_blank")):
print link发布于 2013-07-10 23:11:34
使用BeautifulSoup是可以的,但是您应该传入html字符串,而不仅仅是html文件的路径。BeautifulSoup接受html字符串作为参数,而不是文件路径。它不会打开它,然后自动读取内容。你应该自己来做。如果你传入a.html,那么这道菜就是<html><body><p>a.html</p></body></html>。这不是文件的内容。当然没有任何联系。您应该使用BeautifulSoup(open(path).read(), ...)。
编辑:
它还接受文件描述符。BeautifulSoup(open(path), ...)就足够了。
https://stackoverflow.com/questions/17574119
复制相似问题