我编写了一个从指定网址中提取某些文字的代码,但是它给了我2或3(取决于网页)不同行中的后续相同输出。我只需要使用第一个输出。我该怎么办? 这是我的代码: -
import requests, re
from bs4 import BeautifulSoup
url="http://www.barneys.com/raf-simons-%22boys%22-poplin-shirt-504182589.html#start=2"
r=requests.get(url)
soup=BeautifulSoup(r.content)
links=soup.find_all("a")
g_d4=soup.find_all("ol", {"class":"breadcrumb"})
for item in g_d4:
links_2=soup.find_all('a', href=re.compile('^http://www.barneys.com/barneys-new-york/men/'))
pattern_2=re.compile("clothing/(\w+)")
for link in links_2:
match_1=pattern_2.search(link["href"])
if match_1:
print (match_1.group(1))
我的输出是:
shirts
shirts
shirts
我希望我的输出就像:
shirts
我该怎么办?
答案 0 :(得分:1)
不确定你需要哪个答案,所以我会回答这两个问题。
如果您希望在整个页面中获得唯一结果,则可以使用集合执行以下操作:
for item in g_d4:
links_2=soup.find_all('a', href=re.compile('^http://www.barneys.com/barneys-new-york/men/'))
pattern_2=re.compile("clothing/(\w+)")
matches = set()
for link in links_2:
match_1=pattern_2.search(link["href"])
if match_1:
matches.add(match_1.group(1))
print(matches)
如果您只想在每次迭代中获得第一个结果,则可以在内部循环中中断:
for item in g_d4:
links_2=soup.find_all('a', href=re.compile('^http://www.barneys.com/barneys-new-york/men/'))
pattern_2=re.compile("clothing/(\w+)")
for link in links_2:
match_1=pattern_2.search(link["href"])
if match_1:
print(match_1.group(1))
break