我正在使用 Beautiful Soup 在 Python 3 中爬取一些网站,以提取 Facebook 页面的 URL。我只想提取每个网站的一个 URL,并将其重定向到 Facebook 页面配置文件,而不是共享类型页面。
因此,我尝试使用正则表达式从 `a` 标签的 `href` 属性中提取 URL。使用 Beautiful Soup,我提取了每个网站的第一个 `a` 标签,并通过包含 Facebook 页面 URL 的 `href` 属性值进行过滤。
我的代码如下:
以下是我希望提取URL的
但我得到了这些
因此,我尝试使用正则表达式从 `a` 标签的 `href` 属性中提取 URL。使用 Beautiful Soup,我提取了每个网站的第一个 `a` 标签,并通过包含 Facebook 页面 URL 的 `href` 属性值进行过滤。
我的代码如下:
# 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']
以下是我希望提取URL的
<a>
标签示例(为了方便标识,我给每个网站都加上了数字,与我的尝试结果一样):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)]
我否定了在http://www.facebook.com/
之后具有a
(或任何一个s
、h
、r
、e
)的任何url。
第三次尝试
https?://(www\\.)?facebook\\.com/(\\w+\\.?)+
我尝试删除 [^share]
,但得到的标签与第一次尝试时相同,因此也获取了分享类型的 URL。
如何仅选择没有分享类型 Facebook URL 作为 href
值的 a
标签?