首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用BeautifulSoup从本地文件收集数据

尝试使用BeautifulSoup从本地文件收集数据
EN

Stack Overflow用户
提问于 2013-07-10 23:01:45
回答 2查看 2.9K关注 0票数 1

我想运行python脚本来解析html文件,并收集具有target="_blank"属性的所有链接的列表。

我尝试了下面的方法,但是没有从bs4得到任何东西。SoupStrainer在文档中说,它将以与findAll等相同的方式获取args,应该这样做吗?我是不是错过了什么愚蠢的错误?

代码语言:javascript
复制
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())
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-10 23:44:03

我想你需要这样的东西

代码语言:javascript
复制
if path.endswith(".html"):
    htmlfile = open(dirpath)
    for link in BeautifulSoup(htmlfile,parse_only=SoupStrainer(target="_blank")):
        print link
票数 2
EN

Stack Overflow用户

发布于 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), ...)就足够了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17574119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档