如何删除具有特定域名或字符串的URL链接

时间:2016-03-17 11:05:37

标签: python

我已经创建了一个抓取网站的功能。该功能会抓取网站并在网站内获取网址。

print links      #scrape()
http://www.web1.to/something
http://www.web2.gov.uk/something
http://www.web3.com/something
http://www.web4.com/something
http://www.web5.com/something
http://www.web6.com/something

在获取它时,还会检索不需要的网站链接或使用我要删除的字符串 .rdf

  def scrape()
    .
    .
            links = re.findall('href="(http.*?)"', sourceCode)

            for link in set(links):                         
                if 'web1.to' in link:
                    pass
                elif 'web2.gov.' in link:
                    pass
                elif '.rdf' in link:
                    pass
                else:                       
                    return link
                    #print link; #it seems to work(*)

#this section which call scrape function and prints the links   
for web in scrape():
    print web
    time.sleep(1)

我创建了这个函数,如果我在scrape函数中使用print,这似乎有效(参见注释行#print链接)。但是当我在外面打电话时它只返回一个网址

http://www.web6.com/something

然后我删除了for循环

            if 'web1.to' in link:
                pass
            elif 'web2.gov.' in link:
                pass
            elif 'web3.com' in link:
                pass
            else:                       
                return link

使用此修改功能从外部打印。我在这里给出的条件不起作用,它会打印所有网站。

我知道我在编码方面犯了一些逻辑错误,但我没有看到它。你能帮我吗

2 个答案:

答案 0 :(得分:1)

您的函数正在返回它找到的第一个有效链接。尝试在scrape功能的顶部添加新列表:

valid = []

每次找到有效链接时,请将其附加到有效链接列表中:

valid.append(link)

完成所有链接的检查后,请返回整个列表:

return valid

尝试这样的事情:

valid = []
for link in set(links):
    if 'web1.to' in link:
        pass
    elif 'web2.gov.' in link:
        pass
    elif '.rdf' in link:
        pass
    else:                       
        valid.append(link)

return valid

答案 1 :(得分:0)

这样做:

def scrape()
    .
    .
            links = re.findall('href="(http.*?)"', sourceCode)
            return links

links =  scrape()
for link in links:
    if 'web1.to' in link:
        pass
    elif 'web2.gov.' in link:
        pass
    elif 'web3.com' in link:
        pass
    else:                       
        print link

案例2:

您已从内部删除for循环,现在尝试访问"link"以检查各种条件,但未定义link,因此您收到错误。