函数调用问题

函数调用问题

问题描述:

我有这样的Python代码,但是当我运行它,正在打印仅仅是第一目标,这是我的Python代码:函数调用问题

def get_next_target(S): 
    start_link = S.find('<a href=') 
    start_quote = S.find('"', start_link) 
    end_quote = S.find('"', start_quote + 1) 
    url = S[start_quote + 1:end_quote] 
    print url 
    return url, end_quote 

get_next_target(S) 

其中可变S = '<susuds><a href="www.target1.com"/><ahsahsh><saudahsd><a href="www.target2.com"/><p>sa</h1><a href="www.target3.com"/>'

我想要什么是打印出三个目标,但是它只是打印第一个目标,为什么?

+0

'S.find'只找到第一个,所以你试图解决你的问题是什么? –

+0

但是我returnig end_quote,所以它不断更新页面,P.S我刚开始学习python。 –

+0

您只调用一次该功能。不是三次。即使你做了,它仍然会找到第一个。 –

我想你应该使用BeautifulSoup从html/xml中提取信息。

In [1]: from bs4 import BeautifulSoup 

In [2]: html = '''<susuds><a href="www.target1.com"/><ahsahsh><saudahsd><a href= 
    ...: "www.target2.com"/><p>sa</h1><a href="www.target3.com"/>''' 

In [3]: soup = BeautifulSoup(html, 'lxml') 

In [4]: for a in soup.find_all('a'): 
    ...:  print(a['href']) 
    ...:  
www.target1.com 
www.target2.com 
www.target3.com 

如果您逻辑上想要在不使用任何特殊模块的情况下实现此目的,那么以下代码将执行此操作。

import re 
import sys 
S = '<susuds><a href="www.target1.com"/><ahsahsh><saudahsd><a href="www.target2.com"/><p>sa</h1><a href="www.target3.com"/>' 
abc = [] 
def get_next_target(S): 
    search_index = [i.start() for i in re.finditer('<a href=', S)] 
    for j in range(len(search_index)): 
     if (j == len(search_index)-1): 
      A =S[ search_index[j]:len(S) ] 
      search_start_index = A.find('"') 
      search_end_index = A.rfind('"') 
      start_final = search_index[j] + search_start_index + 1 
      start_end = search_index[j] + search_end_index 
      final_result = S[ start_final:start_end ] 
      abc.append(final_result) 
      print abc 
     else: 
      A = S[ search_index[j]:search_index[j+1] ] 
      search_start_index = A.find('"') 
      search_end_index = A.rfind('"') 
      start_final = search_index[j] + search_start_index + 1 
      start_end = search_index[j] + search_end_index 
      final_result = S[ start_final:start_end ] 
      abc.append(final_result)`enter code here` 
get_next_target(S) 

注意:如果你不希望的结果追加到一个列表,然后替换最后两行的if和else语句“打印final_result”。 enter code here