我一直在研究一个会刮掉某些网页的python脚本。
脚本的开头如下所示:
# -*- coding: UTF-8 -*-
import urllib2
import re
database = ''
contents = open('contents.html', 'r')
for line in contents:
entry = ''
f = re.search('(?<=a href=")(.+?)(?=\.htm)', line)
if f:
entry = f.group(0)
page = urllib2.urlopen('https://indo-european.info/pokorny-etymological-dictionary/' + entry + '.htm').read()
m = re.search('English meaning( )+\s+(.+?)</font>', page)
if m:
title = m.group(2)
else:
title = 'N/A'
这会访问每个页面并从中获取标题。然后我有许多代码块来测试每个页面中是否存在某些文本,这是一个例子:
abg = re.findall('\babg\b', page);
if len(abg) == 0:
abg = 'N'
else:
abg = 'Y'
然后,最后,仍然在for循环中,我将此信息添加到变量数据库:
database += '\n' + str('<F>') + str(entry) + '<TITLE="' + str(title) + '"><FQ="N"><SQ="N"><ABG="' + str(abg) + '"></F>'
请注意,我已经为每个变量使用了str(),因为我得到了一个&#34;不能连接字符串和列表&#34;出于某种原因出错。
完成for循环后,我将数据库变量写入文件:
f = open('database.txt', 'wb')
f.write(database)
f.close()
当我在命令行中运行它时,它会超时或永远不会完成运行。关于可能导致问题的任何想法?
编辑:我修好了。由于我正在使用数据库变量存储每行重复循环的结果,所以程序似乎变得越来越慢。我必须做的就是解决问题,就是在for循环期间改变写入函数。