首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python写的爬虫关于删除重复url的有关问题

2013-05-02 
python写的爬虫关于删除重复url的问题小弟刚学python,在写一个网络爬虫,将制定url的网页上的所有url都抓下

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&regType=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里面.

热点排行