从网站中获取网址?

时间:2013-11-25 02:19:52

标签: python regex url

我有大量文字,想要解析所有网址,返回遵循此模式的网址列表:https://www.facebook.com/。* $。

以下是我要解析的文字示例:

<abbr title="Monday xxxx" data-utime="xx" class="timestamp">over a year ago</abbr></div></div></div></div></div></li><li class="fbProfileBrowserListItem"><div class="clearfix _5qo4"><a class="_8o _8t lfloat" href="https://www.facebook.com/xxxxx?fref=pb&amp;hc_location=profile_browser" tabindex="-1" aria-hidden="true" data-hovercard="/ajax/hovercard/user.php?id=xxxx&amp;extragetparams=%7B%22hc_location%22%3A%22profile_browser%22%7D"><img class="_s0 _rw img" src="https://fbcdn-profile-xxxxxxxx.net/hprofile-ak-ash2/xxxxxx.jpg" alt=""></a><div class="clearfix _42ef"><div class="_6a rfloat"><div class="_6a _6b" style="height:50px"></div><div class="_6a _6b"><div class="_5t4x"><div class="FriendButton" id="u_2h_1w"><button class="_42ft _4jy0 FriendRequestAdd addButton _4jy3 _517h" type="button">

我想得到“https://www.facebook.com/xxxxx?fref=pb&hc_location=profile_browser

我尝试了什么

from bs4 import BeautifulSoup
html = open('full_page_firefox.html')
def getLinks(html):
    soup = BeautifulSoup(html)
    anchors = soup.findAll('a')
    links = []
    for a in anchors:
        links.append(a['href'])
    return links
print getLinks(html)

拆分似乎也不起作用,因为它不保留模式。因此,如果我使用类似“https://www.facebook.com/ *。$”的内容来获取带有re.split()或其他内容的网址,则无效。

3 个答案:

答案 0 :(得分:1)

你的代码在这里工作,检查你的输入文件,确保漂亮的肥皂可以解析它。

不过,请考虑使用lxml

from lxml import etree
print etree.parse('full_page_firefox.html').xpath('//a/@href | //img/@src')

['https://www.facebook.com/xxxxx?fref=pb&hc_location=profile_browser', 
'https://fbcdn-profile-xxxxxxxx.net/hprofile-ak-ash2/xxxxxx.jpg']

答案 1 :(得分:1)

你的功能有效。我将您提供的html位复制到一个html文件中,并添加了<html><body>标记,以便进行衡量。

然后我尝试了:

with open('C:/users/brian/desktop/html.html') as html:
    print getLinks(html)

在python解释器中得到以下输出:

[u'https://www.facebook.com/xxxxx?fref=pb&hc_location=profile_browser']

在此问候str并且你很好

答案 2 :(得分:1)

你可以在BS解析之后通过该模式检查网址,如下所示:

from bs4 import BeautifulSoup
import re
html = open('full_page_firefox.html')
def getLinks(html):
    soup = BeautifulSoup(html)
    anchors = soup.findAll('a')
    links = []
    for a in anchors:
        match_result = re.match(r'https://www.facebook.com/.*$', a['href'])
        if match_result is not None:
            links.append(match_result.string)
    return links
print getLinks(html)

注意: 1.&#39; /&#39;之间没有空格和&#39;。&#39; 2&#39; $&#39;匹配字符串的结尾,小心使用