我已经创建了一个抓取网站的功能。该功能会抓取网站并在网站内获取网址。
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
使用此修改功能从外部打印。我在这里给出的条件不起作用,它会打印所有网站。
我知道我在编码方面犯了一些逻辑错误,但我没有看到它。你能帮我吗
答案 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
,因此您收到错误。