我试图在Python中创建一个网页抓取脚本,我遵循一堆链接并将它们插入到.txt文件中。但是,只有当网站已经不存在于文件中时,我才想这样做。
我已经写了这个代码插入给定的网站链接到文件,到目前为止(不工作):
def writeSite(site):
file = open("websites.txt", 'a+')
# print(site)
if site in file.read():
return
file.write(site + "n")
file.close()
提前感谢。
您已经非常接近了,但是因为您打开文件是为了追加它,所以它从末尾的文件指针开始。您需要查找到开头重新读取其内容:
def writeSite(site):
file = open("websites.txt", 'a+')
file.seek(0)
# print(site)
if site in file.read():
return
file.write(site + "n")
file.close()
但是,请记住site in file.read()
是非常粗糙的。
例如,假设您已经在文件中有'http://somesite.com/page/'
,但现在您想添加'http://somesite.com/'
- URL作为一个整体不在文件中,但您的测试将找到它。
如果您想检查整行(并确保您很好地处理了文件),那么这样做会更好:
def writeSite(site):
site += 'n'
with open("websites.txt", 'a+') as f:
f.seek(0)
if site in f.readlines():
return
f.write(site)
它在站点的名称中添加了一个换行符来分隔文件中的URL,并使用readlines来利用这个事实来检查整个URL。使用with
确保文件总是被关闭。
既然你想先读再写,你可以使用'r+'
作为模式,并跳过查找——但前提是你可以确定文件已经存在。我假设你选择了'a+'
,因为事实并非如此。
(以防您担心这会改变site
的值—这只适用于函数内部的参数。无论您在函数外部传入的是什么值,都不会受到影响)