打造一个轻量级企业基本信息采集框架(四)

前言

上文我们定义了一个调度器,其实就是传参,具体的请查看:打造一个轻量级企业基本信息采集框架(三),本文主要对下载器做一个定义,期初想到用aiohttp做下载,后面发现aiohttp异步并发采集速度有点快,改为requests采集(主要是穷,用不起代理),当然,后面我在采集企业详细信息的时候,用了aiohttp了,其实这两者的用法都不是太难,感兴趣的去看下官方文档或者google、百度一下,立马会有很多例子出来。

我们话不多说,show your code!!!

def req_data(url,data,page,keyword,timeout=10,proxies=None):
    """
    用来请求采集网址
    :param data: 请求参数
    :param url: url
    :param page: 页数
    :param keyword: 关键词
    :return: html
    """
    count = 1
    while count < 6:
        try:
            req = requests.post(url+str(page),headers=get_header(),timeout=timeout,data=data)
            if req.status_code in VALID_STATUS_CODE and len(req.text) > 100:
                return req.text
            else:
                # logger.error("正在重试请求 第" +  str(count) + "次" )
                count += 1
                time.sleep(random.randint(1,2))
        except:
            count += 1
            time.sleep(random.randint(1,2))
    else:
        logger.debug("关键词为…" + keyword + " 第%s页采集失败" % str(page))
        return None

简单做下说明。定义了一个req_data函数,主要传入四个参数,上面都有描述,代码部分主要是对每一个请求做5次尝试,如果返回的状态码不是200和201,且其返回值长度小于100,我们就重新尝试,如果5次还是这样,就直接返回None值,如果返回正确,将其返回到解析器去解析返回值,逻辑很简单。
下面是aiohttp请求的部分,没怎么用到,简单贴一下吧:

async def fetch(session,data,url,entername,timeout=5):
    count = 1
    while count < 6:
        try:
            async with session.post(url=url, data=data, timeout=timeout, allow_redirects=False,headers=get_headers2()) as response:
                html = await response.text(errors='ignore')
                await asyncio.sleep(random.randint(1,2))
                if response.status in VALID_STATUS_CODE and len(html) > 100:
                    return html
                else:
                    # logger.error("正在尝试重新请求" + url)
                    count +=1
                    time.sleep(1)
        except:
            # logger.info("正在尝试重新请求" + url)
            count += 1
            time.sleep(1)
    else:
        logger.debug("企业名称为… " + entername +"企业详细信息采集失败" )
        return None



async def req_detailinfo(url,data,entername,proxy=None):
    conn = aiohttp.TCPConnector(verify_ssl=False)
    async with semaphore:
        async with aiohttp.ClientSession(connector=conn) as session:
            response = await fetch(session,data,url,entername)
            return response

以上就是下载器这边的设置部分啦,是不是so easy,看起来条理清晰了很多是吧,下文我们介绍解析器这部分,这部分其实就是写写json,传传参,没有几个部分我们这个轻量级框架就要完成啦,是不是有点小激动,嘿嘿。
打造一个轻量级企业基本信息采集框架(五)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值