python写的爬虫关于删除重复url的问题
小弟刚学python,在写一个网络爬虫,将制定url的网页上的所有url都抓下来并保存到本地文件里,得到新的url后与文件中的url进行计较,看是否已经抓过,如果是新的url就保存,不是就删除。但是我在比较的时候老是出错,下面是我的代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#coding=utf-8
import re
import urllib
import os
url="http://www.baidu.com" #制定url
urlText=urllib.urlopen(url).read()
directory='/home/code/web/'
if not os.path.exists(directory):
os.mkdir(directory)
foundUrl="<a.*?<\/a>"
filename=directory+'url.txt'
file=open(filename, 'a')
urls=re.findall(foundUrl,urlText)
file.write(str(urls)) #讲话抓到的url保存到文件里
file.close()
file = open(filename, 'r')
for i in urls: #判断文件里是否已经有这个url
print i
if i in file.read():
#file.write(str(i))
print 'success'
else:
print 'failed'
file.close()
输入结构为
success
<a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" name="tj_login" id="lb" onclick="return false;">登录</a>
failed
<a href="https://passport.baidu.com/v2/?reg®Type=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" target="_blank" name="tj_reg" class="reg">注册</a>
failed
下边的全是failed
哪位大牛知道问题的所在,请不吝赐教 Python
[解决办法]
没有看你的代码
但给你个思路——应该用set()的相关运算(交并差),比较已经完成和等待处理的部分
[解决办法]
file.write(str(urls))这个不行,urls是个列表,某些字符会变成转义方式,所以后面比较全错,urls的元素是字符的话改file.writelines(urls)好点,如果urls很乱,里面还有非字串的东西,建议是直接存入python对象pickle.dump(url, file),这样就不用费事再转换字符...
[解决办法]
打印看到的换行是print函数完成时加的,file.writelines(urls)不会帮你换行,或许file.write('\n'.join(urls))比较适合你这个场景...
[解决办法]
删除重复的url,你直接用一个dict就行了,用url做key,value可以随便,数字也行.
因为dict的key是唯一的.所以你在处理的时候根本不用做任何操作,都是dict[key] = 1,如果url已经存在,不影响结果,如果不存在,会被加到dict里面.