Я собираю несколько сайтов для извлечения URL-адресов страниц Facebook в Python 3 с помощью Beautiful Soup. Я заинтересован в том, чтобы извлечь только один URL-адрес для каждого веб-сайта, который перенаправляется в профиль страницы Facebook, но не является типом общего ресурса.
По этой причине я пытаюсь использовать регулярное выражение для извлечения URL-адресов из атрибута href
в тегах <a>
. С помощью Beautiful Soup я извлекаю первый тег <a>
для каждого веб-сайта, фильтруя по значению атрибута href
, содержащего URL-адрес страницы Facebook.
Мой код следующий:
# coding=utf-8
from bs4 import BeautifulSoup
import requests
import re
def makeSoup(website):
if 'http' in website:
page = requests.get(website)
else:
page = requests.get('http://' + website)
soup = BeautifulSoup(page.content, 'html.parser')
page.close()
return soup
def facebookProfileScraper(soup):
link = soup.find('a', {'href': re.compile("https?://(www\\.)?facebook\\.com/[^(share)]?(\\w+\\.?)+")})
if link is None:
return "NaN"
return link['href']
Ниже приведены примеры тегов <a>
, из которых я хотел бы извлечь URL-адреса (я ставлю цифры, чтобы идентифицировать каждый веб-сайт также для результатов, которые я получил при моих попытках):
1. <a class="rss fb" href="http://www.facebook.com/gironafc" target="_blank">Facebook</a>
2. <a href="https://www.facebook.com/waterworld.parcaquatic" target="_blank"><i class="fa fa-facebook"></i></a>
3. <a class="social facebook" target="_blank" href="https://www.facebook.com/aquabrava"><span class="fa fa-facebook"></span></a>
4. <a href="https://www.facebook.com/UEO1921" target="_blank"><img alt="Facebook" height="32" src="http://www.ueolot.com/wp-content/themes/realsoccer/images/light/social-icon/facebook.png" width="32"/>
</a>
5. <a href="https://www.facebook.com/Roc%C3%B2drom-Girona-187271461378780/">Facebook</a>
6. <a class="fb_share" href="https://www.facebook.com/pages/Skydive-Empuriabrava/44214266003?fref=ts" target="_blank"></a>
Первая попытка
https?://(www\\.)?facebook\\.com/[^(share)]?(\\w+\\.?)+
Но я получил эти </a>
теги:
1. <a href="http://facebook.com/share.php?src=bm&v=3&u=" target="_blank"><span class="fa fa-facebook"></span></a>
2. <a href="https://www.facebook.com/waterworld.parcaquatic" target="_blank"><i class="fa fa-facebook"></i></a>
3. <a class="social facebook" href="https://www.facebook.com/aquabrava" target="_blank"><span class="fa fa-facebook"></span></a>
4. <a href="https://www.facebook.com/UEO1921" target="_blank"><img alt="Facebook" height="32" src="http://www.ueolot.com/wp-content/themes/realsoccer/images/light/social-icon/facebook.png" width="32"/>
</a>
5. <a href="https://www.facebook.com/Roc%C3%B2drom-Girona-187271461378780/">Facebook</a>
6. <a class="fb_share" href="https://www.facebook.com/pages/Skydive-Empuriabrava/44214266003?fref=ts" target="_blank"></a>
С веб-сайта 1. Я получил неправильный тег <a>
.
Вторая попытка
https?://(www\\.)?facebook\\.com/[^(share)](\\w+\\.?)+
Я пытался удалить ?
после [^share]
, но получил следующие теги:
1. <a class="rss fb" href="http://www.facebook.com/gironafc" target="_blank">Facebook</a>
2. <a href="https://www.facebook.com/waterworld.parcaquatic" target="_blank"><i class="fa fa-facebook"></i></a>
3. None
4. <a href="https://www.facebook.com/UEO1921" target="_blank"><img alt="Facebook" height="32" src="http://www.ueolot.com/wp-content/themes/realsoccer/images/light/social-icon/facebook.png" width="32"/>
</a>
5. <a href="https://www.facebook.com/Roc%C3%B2drom-Girona-187271461378780/">Facebook</a>
6.<a class="fb_share" href="https://www.facebook.com/pages/Skydive-Empuriabrava/44214266003?fref=ts" target="_blank"></a>
с веб-сайта 3. Я не извлекаю тег <a>
, поскольку с помощью [^(share)]
я отменяю любой URL с помощью a
(или любого из s
, h
, r
, e
) после http://www.facebook.com/
.
Третья попытка
https?://(www\\.)?facebook\\.com/(\\w+\\.?)+
Я попытался удалить [^share]
, но полученные теги были такими же, как и с первой попытки, поэтому я тоже получил URL типа общего ресурса.
Как выбрать только теги a
, которые не имеют URL-адреса Facebook общего типа, в качестве значения href
?