【问题标题】:How to get only links from parsed html using python?如何使用python仅从解析的html中获取链接?
【发布时间】:2021-10-31 15:43:54
【问题描述】:

如果标签是这种形式,如何获取链接?

<a href="/url?q=instagram.com/goinggourmet/… class="zBAuLc"><div class="BNeawe vvjwJb AP7Wnd">Going Gourmet Catering (@goinggourmet) - Instagram</div></h3><div class="BNeawe UPmit AP7Wnd">www.instagram.com › goinggourmet</div></a> 

我尝试了下面的代码,它帮助我只获取 URL,但 URL 采用这种格式。

/url?q=https://bespokecatering.sydney/&sa=U&ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAEQAg&usg=AOvVaw076QI0_4Yw4hNZ6iXHQZL-

/url?q=https://www.facebook.com/bespokecatering.sydney/videos/lockdown-does-not-mean-unfulfilled-cravings-order-our-weekly-favorites-order-her/892336708293067/%3Fextid%3DSEO----&sa=U&ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQtwJ6BAgEEAE&usg=AOvVaw2YQI1Bqwip72axc-Nh2_6e

/url?q=https://www.instagram.com/bespoke_catering/%3Fhl%3Den&sa=U&ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAoQAg&usg=AOvVaw1QUCWYmxfSLb6Jx20hyXIR

我只需要来自 Facebook 和 Instagram 的 URL,不需要任何额外的措辞,我的意思是我只想要真正的链接,而不是重定向的链接。

我需要以上链接中的类似内容,

'https://www.facebook.com/bespokecatering.sydney' 'https://www.instagram.com/bespoke_餐饮'

div = soup.find_all('div',attrs={'class':'kCrYT'})
for w in div:
for link in w.select('a'):
    urls = link['href']
    print(urls)

非常感谢任何帮助。

我尝试了下面的代码,但它返回空结果或不同的结果

div = soup.find_all('div',attrs={'class':'kCrYT'})
for w in div:
   for link in w.select('a'):
     urls = link['href']
     print(urls)
     for url in urls:
        try:
            j=url.split('=')[1]
            k=  '/'.join(j.split('/')[0:4])
            #print(k) 
        except:
            k = '' 

【问题讨论】:

    标签: python html web-scraping beautifulsoup google-search


    【解决方案1】:

    您已经选择了 &lt;a&gt; - 只需循环选择并通过 ['href'] 打印结果:

    div = soup.find_all('div',attrs={'class':'kCrYT'})
        for w in div:
            for link in w.select('a'):
                print(link['href'])
    

    如果您改进了您的问题并按要求添加了更多信息,我们可以更详细地回答。

    编辑

    用一个简单的例子回答你的附加问题(你应该在你的问题中提供)

    import requests
    from bs4 import BeautifulSoup
    result = '''
    <div class="kCrYT">
        <a href="/url?q=https://bespokecatering.sydney/&sa=U&ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAEQAg&usg=AOvVaw076QI0_4Yw4hNZ6iXHQZL-"></a>
    </div>
    <div class="kCrYT">
        <a href="/url?q=https://www.facebook.com/bespokecatering.sydney/videos/lockdown-does-not-mean-unfulfilled-cravings-order-our-weekly-favorites-order-her/892336708293067/%3Fextid%3DSEO----&sa=U&ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQtwJ6BAgEEAE&usg=AOvVaw2YQI1Bqwip72axc-Nh2_6e"></a>
    </div>
    <div class="kCrYT">
        <a href="/url?q=https://www.instagram.com/bespoke_catering/%3Fhl%3Den&sa=U&ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAoQAg&usg=AOvVaw1QUCWYmxfSLb6Jx20hyXIR"></a>
    </div>
    '''
    soup = BeautifulSoup(result, 'lxml')
    
    div = soup.find_all('div',attrs={'class':'kCrYT'})
    for w in div:
        for link in w.select('a'):
            print(dict(x.split('=') for x in requests.utils.urlparse(link['href']).query.split('&'))['q'].split('%3F')[0])
    

    结果:

    https://bespokecatering.sydney/ https://www.facebook.com/bespokecatering.sydney/videos/lockdown-does-not-mean-unfulfilled-cravings-order-our-weekly-favorites-order-her/892336708293067/ https://www.instagram.com/bespoke_catering/

    【讨论】:

    • 感谢工作。但是我有像 '''/url?q=facebook.com/bespokecatering.sydney/videos/…''' 这样的 URL 不能用作 URL,那么如何将所有 URL 修剪成这样的东西呢? ''' facebook.com/bespokecatering.sydney''' ,感谢帮助:)
    • 有很多方法 ;) - 请改进/编辑您的问题(不是 cmets)并发布 url/代码以便我可以重现,会很棒。
    • 现在编辑了我的问题,是平台的新手,所以要解决它。请查看是否可以重现任何结果。 TIA。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2021-06-16
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多