Как получить только ссылки из проанализированного html с помощью python?

#python #html #web-scraping #beautifulsoup #google-search

Вопрос:

Как я могу получить ссылки, если тег находится в этой форме?

 <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/amp;sa=Uamp;ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAEQAgamp;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/?extid=SEO----amp;sa=Uamp;ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQtwJ6BAgEEAEamp;usg=AOvVaw2YQI1Bqwip72axc-Nh2_6e

/url?q=https://www.instagram.com/bespoke_catering/?hl=enamp;sa=Uamp;ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAoQAgamp;usg=AOvVaw1QUCWYmxfSLb6Jx20hyXIR
 

Мне нужны только URL-адреса из Facebook и Instagram, без каких-либо дополнительных формулировок, я имею в виду, что мне нужна только реальная ссылка, а не перенаправленная ссылка.

Мне нужно что-то подобное из ссылок выше,

‘https://www.facebook.com/bespokecatering.sydney’ ‘https://www.instagram.com/bespoke_catering’

 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 = '' 
 

Ответ №1:

У вас уже есть <a> выбранный — просто повторите выбор и распечатайте результаты с помощью ['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/amp;sa=Uamp;ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAEQAgamp;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/?extid=SEO----amp;sa=Uamp;ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQtwJ6BAgEEAEamp;usg=AOvVaw2YQI1Bqwip72axc-Nh2_6e"></a>
</div>
<div class="kCrYT">
    <a href="/url?q=https://www.instagram.com/bespoke_catering/?hl=enamp;sa=Uamp;ved=2ahUKEwjTv6ueseHyAhUHb30KHYTYABwQFnoECAoQAgamp;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('amp;'))['q'].split('?')[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/

Комментарии:

1. спасибо, что сработало. Но у меня есть URL-адреса, такие как «‘/url?q=facebook.com/bespokecatering.sydney/videos /… «, который не работает в качестве URL-адреса, так как же обрезать все URL-адреса до чего-то подобного? «‘ facebook.com/bespokecatering.sydney «‘ , Помощь приветствуется 🙂

2. Есть много способов 😉 — Пожалуйста, улучшите / отредактируйте свой вопрос(не комментарии) и опубликуйте URL/код, чтобы я мог воспроизвести, было бы здорово.

3. Отредактировал свой вопрос сейчас, новичок в платформе, поэтому работаю над ним. Пожалуйста, посмотрите, сможете ли вы воспроизвести какие-либо результаты. ТИА.