我正在使用 BeautifulSoup 从网络爬虫处理 HTML。该HTML通过过滤器运行的“简化”的HTML,剥离和更换标签,以使该文件仅包含<html>,body,<div>,和<a>标签和可见的文字。
我目前有一个功能,可以从这些页面中提取 URL 和锚文本。除了这些,我还想<a>为每个链接提取标签前后的 N 个“上下文词” 。例如,如果我有以下文件:
<html><body>
<div>This is <a href="www.example.com">a test</a>
<div>There was a big fluffy dog outside the <a href="www.petfood.com">pet food store</a> with such a sad face.<div>
</div>
</body></html>
然后如果 N=8 我想为每个链接获得以下 8 个“上下文词”:
'www.example.com' --> ('This', 'is', 'There', 'was', 'a', 'big', 'fluffy', 'dog')`
'www.petfood.com' --> ('fluffy', 'dog', 'outside', 'the', 'with', 'such', 'a', 'sad')
第一个链接 ( www.example.com) 在到达文档开头之前只有两个词,因此返回这两个词,以及<a>标签后面的 6以组成N=8. 另请注意,返回的单词跨越了<a>标签包含的边界<div>。
第二个链接 ( www.petfood.com)N\2前面有= 4 个单词,后面有4 个单词,因此它们作为上下文返回。也就是说,如果可能的话,N 个单词会在<a>标记之前和之后的单词之间拆分。
如果文本<div>与链接位于同一范围内,我知道如何执行此操作,但我无法弄清楚如何跨<div>边界执行此操作。基本上,为了提取“上下文词”,我想将文档视为只是一个带有链接的可见文本块,忽略包含的 div。
如何<a>使用 BeautifulSoup提取这样的标签周围的文本?为简单起见,我什至会对只返回标记之前/之后可见文本的 N 个字符的答案感到满意(我可以自己处理标记化/拆分)。
qq_笑_17
相关分类