仅打印第一个输出行

时间:2015-07-10 22:05:20

标签: python regex python-2.7 web-scraping beautifulsoup

我编写了一个从指定网址中提取某些文字的代码,但是它给了我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

我该怎么办?

1 个答案:

答案 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