断点详解
当我们针对一个大的网站写好爬虫程序时,往往需要使用很多时间去爬取我们所需要的信息,因为一旦停止运行,所有保存在内存中的已经爬取过的链接以及其他数据将不存在,所以我们得保证我们的程序不会中途终止运行,否则将会前功尽弃。可是在爬取的过程中,我们很难能避开所有的错误使程序完美的运行。
在课程中,我们介绍了一种断点的方法,代码如下:
db_urls = [item['url'] for item in url_list.find()] #取出所有目标地址链接
index_urls = [item['url'] for item in item_info.find()]#取出已经爬取过的地址链接
x = set(db_urls)
y = set(index_urls)
rest_of_urls = x-y#还需爬取的地址链接
那么这段程序应该如何使用呢? 将该程序放在抓取网页信息的程序段之前,并且只需执行一次即可,如下:
if name == 'main':
db_urls = [item['url'] for item in ganji_url.find()]
index_urls = [item['url'] for item in ganji_data1.find()]
x = set(db_urls)
y = set(index_urls)
rest_of_urls = x - ypool = Pool()
pool.map(get_item_info_from, rest_of_urls)
注意事项: 1、请勿将断点程序直接加入我们爬取信息的函数中,这将使我们的程序多做无用功。 2、在使用断点程序之前,请先将目标url,和已经爬取过的url存入数据库。
那么除了加上断点程序,还可以做些什么,来使我们的程序更有健壮性吗? 答案是有的,那就是使用try...except...这是一个捕抓错误的程序,当问题出现时,捕抓它,并且处理,而不至于使我们的程序直接停止运行。代码如下:
def get_item_info_from(url, data=None):
try:
wb_data = requests.get(url)
except Exception as e:
print(e)
这样就可以避免我们在访问网站时,出现错误而导致程序停止运行的尴尬局面了。而try...except...的范围还可以继续扩大。