断点详解

当我们针对一个大的网站写好爬虫程序时,往往需要使用很多时间去爬取我们所需要的信息,因为一旦停止运行,所有保存在内存中的已经爬取过的链接以及其他数据将不存在,所以我们得保证我们的程序不会中途终止运行,否则将会前功尽弃。可是在爬取的过程中,我们很难能避开所有的错误使程序完美的运行。


在课程中,我们介绍了一种断点的方法,代码如下:

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 - y

    pool = 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...的范围还可以继续扩大。

results matching ""

    No results matching ""