pysipder下载文件超时

发布于 2022-09-04 19:13:10 字数 903 浏览 22 评论 0

我使用pyspider下载pdf文件,具体爬虫代码如下:
@config(priority=2)

def detail_page(self, response):
    author = []
    for each in response.doc('h2 a').items():
        author.push(each.text())
    
    file = self.down_file(response.doc('.download-links a[href^="http"]').attr.href)
    return {
        "author": ",".join(author),
        "title": file,
    }

def down_file(self, file_url):   

    file_name = file_url.split('/')[-1]  
    u = urllib2.urlopen(file_url)  
    f = open(file_name, 'wb')  
    meta = u.info()  
    file_size = int(meta.getheaders("Content-Length")[0])  

    file_size_dl = 0 
    block_sz = 8192 
    while True:  
        buffer = u.read(block_sz)  
        if not buffer:  
            break 

        file_size_dl += len(buffer)  
        f.write(buffer)  
    f.close()
    return file_name

结果爬取超时TimeoutError: process timeout,不知该如何处理?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟柳画桥 2022-09-11 19:13:10

不要在脚本中调用 urllib2.urlopen,这样会柱塞脚本的运行。
如果文件小于10M,使用 self.crawl 抓取即可,如果大于10M,将链接导出到另外的系统中进行下载。

几度春秋 2022-09-11 19:13:10

对于大文件下载,能否启动多线程下载?

浪漫人生路 2022-09-11 19:13:10
    PROCESS_TIME_LIMIT = 30
    EXCEPTION_LIMIT = 3

    RESULT_LOGS_LIMIT = 1000
    RESULT_RESULT_LIMIT = 10

    def __init__(self, projectdb, inqueue, status_queue, newtask_queue, result_queue,
                 enable_stdout_capture=True,
                 enable_projects_import=True,
                 process_time_limit=PROCESS_TIME_LIMIT):
        self.inqueue = inqueue
        self.status_queue = status_queue
        self.newtask_queue = newtask_queue
        self.result_queue = result_queue
        self.projectdb = projectdb
        self.enable_stdout_capture = enable_stdout_capture

        self._quit = False
        self._exceptions = 10
        self.project_manager = ProjectManager(projectdb, dict(
            result_queue=self.result_queue,
            enable_stdout_capture=self.enable_stdout_capture,
            process_time_limit=process_time_limit,
        ))

        if enable_projects_import:
            self.enable_projects_import()

源码中设置了process的时间30s,而且没有提供修改的入口.

所以要不修改源码,要不修改代码.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文