我有大量文字,想要解析所有网址,返回遵循此模式的网址列表: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&hc_location=profile_browser" tabindex="-1" aria-hidden="true" data-hovercard="/ajax/hovercard/user.php?id=xxxx&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()或其他内容的网址,则无效。
答案 0 :(得分:1)
你的代码在这里工作,检查你的输入文件,确保漂亮的肥皂可以解析它。
不过,请考虑使用lxmlfrom 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;匹配字符串的结尾,小心使用