使用Python从字符串中提取链接

使用Python从字符串中提取链接,python,beautifulsoup,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 = "h

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

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
一切正常。它接受用户输入并搜索雅虎。 我遇到的问题是,假设我搜索了“狗”

然后程序将打印如下内容: “a id=“link-1”class=“yschttl spt”href=”http://www.dog.com/“数据bk=”5101.1>b>狗/b>用品| b>狗/b>食物,b>狗/b>床,b>狗/b>wbr>/wbr>跳蚤控制和更多…/a>”

这确实是页面上的第一个链接。但是我只希望它打印出来。”http://www.dog.com/“有人能帮我吗


谢谢。

尝试使用正则表达式。请参阅:


link=your\u full\u link\u string.split('href=“”)[1]。split(““”)[0]

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/'
相反,Unicode版本也不错


标准警告:一定要检查Yahoo!的最终用户许可证是否允许您做任何您想做的事情,因为许多许可证排除了某些自动使用。

他希望http被打印出来,但它不应该是r'href=“(.*)”?不,我对编程没有太多经验。我尝试过使用它,但我得到了这个错误回溯(最后一次调用):文件“scraper.py”,第25行,在match=re.search(r''http://(.*?'),link1)文件/usr/lib/python2.6/re.py,第142行,在搜索返回中编译(模式,标志)。搜索(字符串)TypeError:应为字符串或buffer@moretimetocryPna的答案也会起作用,可能更简单。使用正则表达式可能有点棘手。我比我更喜欢DSM的解决方案,所以请遵循他的建议。我尝试过使用它,但我遇到了这个错误。你尝试过正则表达式吗?谢谢DSM。我一直在尝试做汤小时。我尝试了许多变体,但都没有成功。get(“href”)成功了。再次感谢
>>> 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/'
 u'http://www.dog.com/'