python网页数据采集的基本概念完整记录asyncio asyncio是一个异步IO库了。你也可以通过pypi安装它。很复杂,我不会介绍太多的细节。相反,我将解释你需要知道使用它来编写异步代码。Co-program和事件循环。协同程序等方法,但他们可以暂停和继续在特定的点在代码中。当等待IO(比如HTTP请求)执行另一个请求时,它可用于暂停合作项目。我们使用关键字收益率从设定状态,表明我们需要协同程序的返回值。事件循环用于安排合作项目的执行。关于asyncio还有更多,但上面的就是我们需要知道到目前为止。也许你还是有点不清楚,所以让我们来看看一些代码。aiohttp是一个库,它使用asyncio,其API看起来很像请求API。
我们用来装饰方法协同程序是一个协同程序,所以这是一个可读的方法,我们需要使用从称之为屈服。除了这些,下面的代码看起来很直观:def print_page (url):反应=从身体(\u2018得到\u2019,url)收益率=产量从_and_close(解码= True)打印(身体)我们可以使用收益率从另一个协调程序叫做协调计划。为了从同步调用协同程序代码,我们需要一个事件循环。我们可以得到一个标准的事件循环通过_event_loop(),然后使用其run_until_complete()方法运行合作项目。因此,为了使先前的合作项目来看,我们只需要做以下步骤:循环= _event_loop () _until_complete (print_page(\u201C))一个有用的方法是获得合作项目的列表,同时并返回一个单独的协作程序,包括他们所有,所以我们可以写:_until_complete (((print_page (), print_page())))另一种是_completed,通过它你可以得到一个合作项目列表,并返回一个迭代器产生协同程序的顺序完成,所以当你重复,你会得到每一个可用的结果尽快。
我们需要一些工具来读取html页面。我用beautifulsoup这样做,其余的像pyquery或lxml也可以实现。首先,需要一个辅助协同程序得到请求:def (* args, * * kwargs):响应=产量(\u2018得到\u2019,* args, * * kwargs)返回(收益率从_and_close(解码= True)) def first_magnet(页面):汤=(页面)= (a、标题=下载这个洪流使用磁铁)返回一个\u201Chref\u201D在这个协作程序,URL结果按种子的数量,所以实际上是一个结果数量最多的一个种子:6 def print_magnet(查询):URL = \格式(查询、磁铁))使用以下代码来调用上述方法。
这种方法的一个局限(实际上所有的手动方法)是没有独立的库,可用于处理表单。机械化的方法有很多辅助工具,这使得它很容易提交表单,但是如果你不使用它们,你将不得不自己处理这些事情。这可能会导致一些错误,所以同时我可能会写这样的图书馆(但不需要担心这个到目前为止)。额外的建议:不要问太多,服务器发出3请求同时很酷,但是做5000年在同一时间并不是那么有趣。如果你打算让太多的请求在同一时间,该链接可能被打破。你甚至可能被禁止连接到互联网。为了避免这些,您可以使用信号量。这是一个同步工具,可以用来限制co-programs的数量同时工作。之前我们只需要创建一个信号量建立循环,并通过它同时发生的请求的数量我们想让作为一个参数:sem =(5)然后,我们只需要更换以下页面=产量从得到(url,压缩= True)相同的信号量保护。
用于生成进度条tqdm是一个很好的图书馆。这co-program完全相同的工作,但将显示一个进度条,表示完成。def wait_with_progress(重复):f (_completed(重复),总= len(重复):收益率从f