【问题标题】:python beautiful soup extract href蟒蛇美汤提取物href
【发布时间】:2018-05-13 20:35:55
【问题描述】:

所以我正在用 python 测试美丽的汤(这对那些想知道的人来说很棒)

当我想从我获得的链接中获取 href 时遇到问题,我不明白为什么我无法获取它。

这是我的代码:

for url in soup.find_all('article'):
if "Gonz Logo" in url.get_text():
    if "Black" in url.get_text():
        print(url)

这可行,但它给了我这个:

<article><div class="inner-article"><a href="/shop/jackets/gw1diqgyr/n53istanq" style="height:150px;"><img alt="N7qmqyee 3g" height="150" src="//assets.supremenewyork.com/147789/vi/N7qMqyEe_3g.jpg" width="150"/></a><h1><a class="name-link" href="/shop/jackets/gw1diqgyr/n53istanq">Gonz Logo Coaches Jacket </a></h1><p><a class="name-link" href="/shop/jackets/gw1diqgyr/n53istanq">Black</a></p></div></article>

(是的,一条大线……)

问题是我只想获取 href。当我尝试时:

    print(url.get('href'))

我得到输出:无

我不知道为什么。

感谢您的回答!

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    我认为由于soup.find_all('article'),您没有得到任何结果。当您使用url.get('href') 时,您不会获得链接。

    要获取链接,我建议您使用正则表达式获取所有a 标签,例如:

    links = soup.findAll('a', attrs={'href': re.compile('[a-zA-Z0-9_()]')})
    # now iterate over the links and
    for link in links:
        # get url
        url = link.get('href')
        print(url)
    

    【讨论】:

    • 嗨,我找到了答案!但我仍然想了解您的代码。第一行是做什么的?
    • 它正在获取所有与正则表达式匹配的href 链接。您可以根据自己的选择对其进行自定义。
    • 所以如果我使用它,我需要更改 '[a-zA-Z0-9_()]' 下的内容?但如果我有 2 个变量,例如我的例子,它怎么能工作?
    【解决方案2】:

    你可以试试这个吗?

    for url in soup.find_all('article'):
    if "Gonz Logo" in url.get_text():
        if "Black" in url.get_text():
            for child_a in url.find_all('a'):
               print(child_a['href'])
    

    【讨论】:

    • 出现错误:返回 self.attrs[key] KeyError: 'href'
    • 基本上你需要到达article里面的a元素,然后提取属于a元素的href
    • 请注意,上面的代码会给你文章内的所有hrefs
    • 啊,谢谢!我得到了它。但是在我返回的内容中,我想我试图将 3 个链接合为 1,这就是它不起作用的原因。现在我只需要得到 1 lin 就可以了。非常感谢
    • 您的代码尝试在名为url 的变量中获取href 属性,该变量存储article。但是,article 没有属性 href。事实上,它根本没有任何属性。这就是它返回None 的原因。祝你好运!
    【解决方案3】:

    通过稍微修改 Ali Yilmaz 的解决方案如下 (href=True):

    for url in soup.find_all('article'):
    if "Gonz Logo" in url.get_text():
        if "Black" in url.get_text():
            for child_a in url.find_all('a', href=True):
               print(child_a['href'])
    

    效果很好

    【讨论】: