首先,我要做的是询问用户搜索词。程序然后搜索雅虎并打印出第一个结果的链接。这是我到目前为止的代码。
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/”任何人都可以帮我这个吗?
感谢。
答案 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 & 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]