匹配不需要的链接

灰狐狸

我编写了一个库,该库通过从Wikipedia提取href链接并保存它们来创建持久层。我意识到,我有一个我不关心的链接被标记为/wiki/Cookbook:Table_of_Contents

模拟!~(不匹配)并保持Pythonic的最佳方法是什么?

为了更好的了解和理解,我将在ruby中解决以下问题:

if link =~ %r{^/wiki/Cookbook} && link !~ /Table_of_Contents/

我的代码:

def fetch_links(self, proxy):
    if not self._valid_proxy(proxy):
        raise ValueError('invalid proxy address: {}'.format(proxy))
    self.browser.set_proxies({'http': proxy})
    page = self.browser.open(self.wiki_recipes)
    html = page.read()

    link_tags = SoupStrainer('a', href=True)
    soup = BeautifulSoup(html, parse_only=link_tags)
    recipe_regex = r'^\/wiki\/Cookbook'
    return [link['href'] for link in soup.find_all('a') if
            re.match(recipe_regex, link['href'])]
ec

有多种方法可以排除不需要的链接。

一种选择是参数值中传递一个函数href

soup.find_all('a', href=lambda x: 'Table_of_Contents' not in x)

这将过滤掉属性a没有的标签Table_of_Contentshref

例子:

from bs4 import BeautifulSoup

data = """
<div>
    <a href="/wiki/Cookbook:Table_of_Contents">cookbook</a>
    <a href="/wiki/legal_link">legal</a>
    <a href="http://google.com">google</a>
    <a href="/Table_of_Contents/">contents</a>
</div>
"""

soup = BeautifulSoup(data)
print [a.text for a in soup.find_all('a', href=lambda x: 'Table_of_Contents' not in x)]

印刷:

[u'legal', u'google']

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

匹配不需要的链接

来自分类Dev

不需要文本链接的 Markdown 链接

来自分类Dev

某些功能不需要链接

来自分类Dev

无法摆脱不需要的链接

来自分类Dev

Sed 匹配不需要的额外字符

来自分类Dev

每次单击不需要的链接时,都会打开不需要的新标签页

来自分类Dev

如何在图像链接之前删除不需要的空间

来自分类Dev

使用jQuery从链接中删除不需要的文本

来自分类Dev

如何在图像链接之前删除不需要的空间

来自分类Dev

Ajax.ActionLink创建不需要的链接

来自分类Dev

Scrapy FormRequest重定向不需要链接

来自分类Dev

MediaCodec:调整 ByteBuffer 值以匹配 BufferInfo(不需要?)

来自分类Dev

不需要SelectFieldWidget

来自分类Dev

不需要的popToRootViewController

来自分类Dev

“不需要”功能

来自分类Dev

为什么替换malloc()需要链接器的知识,但是:: operator new()不需要?

来自分类Dev

找到不需要的令牌

来自分类Dev

不需要的onItemSelected调用

来自分类Dev

返回不需要的行

来自分类Dev

不需要实例的类

来自分类Dev

CMake不需要的依赖

来自分类Dev

不需要的查询结果

来自分类Dev

不需要的自动填充

来自分类Dev

与不需要的方法接口

来自分类Dev

SVG不需要的填充

来自分类Dev

不需要的onItemSelected调用

来自分类Dev

Rspec不需要文件

来自分类Dev

不需要的财产变更

来自分类Dev

不需要的清单修改