【发布时间】:2012-05-27 06:47:57
【问题描述】:
我使用 for 循环来抓取网页。但是,我在抓取某些页面时遇到 ip request limit 错误。当我每 20 页抓取一次时,我试图让 python 睡眠几秒钟,但是,错误仍然存在。 python休眠60秒后,我可以再次开始爬行了。
问题是每次出现异常时,我都会丢失一页信息。看来python是用try-except方法跳过异常页面的。
我想知道最好的方法是从遇到异常的页面重新开始爬网。
我的问题是如何从异常页面重新开始抓取。
pageNum = 0
for page in range(1, 200):
pageNum += 1
if(pageNum % 20 ==0): # every 20 pages sleep 180 secs
print 'sleeep 180 secs'
time.sleep(180) # to oppress the ip request limit
try:
for object in api.repost_timeline(id=id, count=200, page=page):
mid = object.__getattribute__("id")
# my code here to store data
except:
print "Ip request limit", page
sleep.time(60)
【问题讨论】:
-
那么你的问题是什么?您的代码似乎可以工作(或者至少方向正确)。
-
感谢您的提醒。问题是每次出现异常时,我都会丢失一页信息。似乎python使用try-except方法跳过了异常页面。我想知道最好的方法是从遇到异常的页面重新开始爬网。我的问题是如何从异常页面重新开始抓取。
-
你不应该把 try 和 except 放在 for 对象循环中吗?
-
object.__getattribute__("id")是一种很奇怪的写法object.id -
@Junuxx:我想我已经按照你说的做了。但是,会有一些异常的页面,我想再次抓取它们,而不是尝试一次就让它们走。
标签: python for-loop try-catch except