使用Python从String中提取链接

时间:2012-09-13 00:41:33

标签: python beautifulsoup

首先,我要做的是询问用户搜索词。程序然后搜索雅虎并打印出第一个结果的链接。这是我到目前为止的代码。

from urllib import urlopen

import re, time
from BeautifulSoup import BeautifulSoup


print "What Would You Like to Search For?"

user_input = raw_input('') #Gets Search Term from User



search = "http://search.yahoo.com/search;_ylt=A2KLtaJX_1BQfT4AwX2bvZx4?p=baker&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-701" 

new_search = search.replace('baker', user_input)           
content = urlopen( new_search ).read()                       

soupcontent = BeautifulSoup(content)                    


link1 = soupcontent.find(id="link-1")            
print link1

一切正常。它需要用户输入并搜索Yahoo。 我遇到的问题是让我说我​​搜索了'狗'

程序将打印出这样的内容:   “a id =”link-1“class =”yschttl spt“href =”http://www.dog.com/“data-bk =”5101.1> b> Dog / b>用品| B个狗/ B个食物,b>狗/ b>床,b>狗/ b> wbr> / wbr>跳蚤控制&更多... / a>“

这确实是页面上的第一个链接。但是我只想打印出来“http://www.dog.com/”任何人都可以帮我这个吗?

感谢。

3 个答案:

答案 0 :(得分:1)

尝试使用正则表达式。请参阅:http://docs.python.org/library/re.html

match = re.search(r'href="(http://.*?)"', str(link1))
print match.group(1)

答案 1 :(得分:1)

BeautifulSoup实际上让这很容易:

>>> from bs4 import BeautifulSoup
>>> from urllib2 import urlopen
>>> 
>>> url = 'http://search.yahoo.com/search?p=dog'
>>> content = urlopen(url).read()
>>> soup = BeautifulSoup(content)
>>> 
>>> soup.find(id="link-1")
<a class="yschttl spt" data-bk="5097.1" href="http://www.dog.com/" id="link-1"><b>Dog</b> Supplies | <b>Dog</b> Food, <b>Dog</b> Beds, <b>Dog</b> <wbr></wbr>Flea Control &amp; More ...</a>
>>> soup.find(id="link-1").get("href")
'http://www.dog.com/'

根据您的UTF-8请求,您可能会看到

 u'http://www.dog.com/'

相反,Unicode版本,也没关系。

标准警告:请务必检查Yahoo!的最终用户许可证是否允许您执行任何操作,因为许多许可证会排除某些自动使用。

答案 2 :(得分:0)

link = your_full_link_string.split('href="')[1].split('"')[0]