この記事ディレクトリ:
- 同期ブログのタイトルをクロール
- 非同期/非同期のawaitクロールブログのタイトル
フィルムは、記事の一連のプロセスの理解共同深さであるサプリメント。
あなたはこの記事から学びます:async/await
実際の爬虫類がどのように使用します。
ケース
クロールバッチはCSDNのタイトルから記事を指定します。記事は以下の通り:
urls = [
'https://blog.csdn.net/Jmilk/article/details/103218919',
'https://blog.csdn.net/stven_king/article/details/103256724',
'https://blog.csdn.net/csdnnews/article/details/103154693',
'https://blog.csdn.net/dg_lee/article/details/103951021',
'https://blog.csdn.net/m0_37907797/article/details/103272967',
'https://blog.csdn.net/zzq900503/article/details/49618605',
'https://blog.csdn.net/weixin_44339238/article/details/103977138',
'https://blog.csdn.net/dengjin20104042056/article/details/103930275',
'https://blog.csdn.net/Mind_programmonkey/article/details/103940511',
'https://blog.csdn.net/xufive/article/details/102993570',
'https://blog.csdn.net/weixin_41010294/article/details/104009722',
'https://blog.csdn.net/yunqiinsight/article/details/103137022',
'https://blog.csdn.net/qq_44210563/article/details/102826406',
]
同期爬虫類
import requests
import time
from lxml import etree
urls = [
'https://blog.csdn.net/Jmilk/article/details/103218919',
'https://blog.csdn.net/stven_king/article/details/103256724',
...此处略
]
def get_title(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
r = requests.get(url, headers)
html = r.content
title = etree.HTML(html).xpath('//h1[@class="title-article"]/text()')[0]
print(title)
def main():
for url in urls:
get_title(url)
if __name__ == '__main__':
start = time.time()
main()
print(f'cost time: {time.time() - start}s')
出力:
4G LTE/EPC 协议栈
Android-Universal-Image-Loader源码分析
8年经验面试官详解 Java 面试秘诀
AES中ECB模式的加密与解密(Python3.7)
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
java进阶(四)------java编程规范---代码质量检测工具FindBugs、PMD和CheckStyle的安装
这是一份集合一线大厂Android工程师必备技能体系+学习路线!
【程序人生】程序员接私活常用平台汇总
你不得不了解的卷积神经网络发展史
致 Python 初学者
OOM别慌,手把手教你定位
中国数据库OceanBase登顶之路
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
cost time: 6.065227508544922s
使用時:6.065227508544922sを。
非同期/非同期のawait爬虫類
真の非同期爬虫類を達成するために、彼らは導入する必要があるaiohttp
モジュールを、aiohttp
ライブラリasyncio使用され、それがコルーチンの一時的なバージョンとして見ることができますrequests
。
import asyncio
import time
import aiohttp
from lxml import etree
urls = [
'https://blog.csdn.net/Jmilk/article/details/103218919',
'https://blog.csdn.net/stven_king/article/details/103256724',
...此处略
]
async def async_get_url(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
async with aiohttp.ClientSession() as session: # 解释1
async with session.get(url, headers=headers) as r:
html = await r.read()
title = etree.HTML(html).xpath('//h1[@class="title-article"]/text()')[0]
print(title)
def async_main():
loop = asyncio.get_event_loop()
tasks = [async_get_url(url) for url in urls]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
if __name__ == '__main__':
start = time.time()
async_main()
print(f'cost time: {time.time() - start}s')
出力:
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
【程序人生】程序员接私活常用平台汇总
致 Python 初学者
中国数据库OceanBase登顶之路
Android-Universal-Image-Loader源码分析
OOM别慌,手把手教你定位
这是一份集合一线大厂Android工程师必备技能体系+学习路线!
AES中ECB模式的加密与解密(Python3.7)
4G LTE/EPC 协议栈
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
8年经验面试官详解 Java 面试秘诀
java进阶(四)------java编程规范---代码质量检测工具FindBugs、PMD和CheckStyle的安装
你不得不了解的卷积神经网络发展史
cost time: 0.6428999900817871s
説明:
解説1:ここでは、非同期コンテキストマネージャであるaiohttp
公式文書書面による申し出。コンテキストが非常マネージャを理解していない場合、あなたは見ることができます[まさにPythonのコンテキストマネージャを見つけます]。
使用時:0.6428999900817871sを。我々は2匹の爬虫類の結果の出力から見ることができます。
- 異なる順序で記事のタイトル。同期爬虫類が続く
urls
URLシーケンス内の記事のタイトルをクロール順番に。順次非同期爬虫類とクロールは完全ではありませんurls
URLと同じ順序で。 - クロールの速度は非常に異なります。非同期クローラ速度は8〜10倍、通常の同期クローラについてです。非同期は、この期間中にネットワーク要求を最大限に活用して爬虫類。それによってクロール効率を高めることができます。
aiohttp
もっと使い方。これは、記事で後述します。
推奨読書
コルーチンの深い理解(III):非同期/非同期のawaitコルーチン
いかなる社会的関心の西加加先生
パイソンと楽しいん。