import aiohttp,asyncio
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://ja.wikipedia.org/wiki/Python'
r = await ses.get(url)
print('==type==\n',type(r))
print('\n==url==\n',r.url)
print('\n==status==\n',r.status)
print('\n==charset==\n',r.charset)
print('\n==cookies==\n',r.cookies)
print('\n==version==\n',r.version)
print('\n==content_type==\n',r.content_type)
print('\n==request_info==\n',r.request_info)
print('\n==reason==\n',r.reason)
print('\n==method==\n',r.method)
r.close()
asyncio.run(aioioio())
==type==
<class 'aiohttp.client_reqrep.ClientResponse'>
==url==
https://ja.wikipedia.org/wiki/Python
==status==
200
==charset==
UTF-8
==cookies==
Set-Cookie: GeoIP=TW:HSQ:Hsinchu:24.81:120.97:v4; Domain=wikipedia.org; Path=/; Secure
Set-Cookie: WMF-Last-Access=17-Mar-2020; Domain=ja.wikipedia.org; expires=Sat, 18 Apr 2020 12:00:00 GMT; HttpOnly; Path=/; Secure
Set-Cookie: WMF-Last-Access-Global=17-Mar-2020; Domain=wikipedia.org; expires=Sat, 18 Apr 2020 12:00:00 GMT; HttpOnly; Path=/; Secure
==version==
HttpVersion(major=1, minor=1)
==content_type==
text/html
==request_info==
RequestInfo(url=URL('https://ja.wikipedia.org/wiki/Python'), method='GET', headers=<CIMultiDictProxy('Host': 'ja.wikipedia.org', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Python/3.7 aiohttp/3.6.2')>, real_url=URL('https://ja.wikipedia.org/wiki/Python'))
==reason==
OK
==method==
GET
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://ja.wikipedia.org/wiki/async'
async with ses.get(url) as r:
print('url: ',r.url)
print('status: ',r.status)
print('charset: ',r.charset)
asyncio.run(aioioio())
url: https://ja.wikipedia.org/wiki/Async
status: 200
charset: UTF-8
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://th.wikipedia.org/wiki/สาธารณรัฐจีน'
r = await ses.get(url)
for h in r.headers:
print(h+': '+r.headers[h])
asyncio.run(aioioio())
Date: Tue, 17 Mar 2020 14:04:22 GMT
Content-Type: text/html; charset=UTF-8
Server: mw1405.eqiad.wmnet
X-Powered-By: PHP/7.2.26-1+0~20191218.33+debian9~1.gbpb5a340+wmf1
X-Content-Type-Options: nosniff
P3P: CP="See https://th.wikipedia.org/wiki/Special:CentralAutoLogin/P3P for more info."
Content-Language: th
Vary: Accept-Encoding,Cookie,Authorization
Last-Modified: Sun, 08 Mar 2020 15:33:33 GMT
Backend-Timing: D=155554 t=1584453862004328
X-ATS-Timestamp: 1584453862
Content-Encoding: gzip
X-Varnish: 234496320
Age: 2
X-Cache: cp5012 miss, cp5007 miss
X-Cache-Status: miss
Server-Timing: cache;desc="miss"
Strict-Transport-Security: max-age=106384710; includeSubDomains; preload
Set-Cookie: WMF-Last-Access=17-Mar-2020;Path=/;HttpOnly;secure;Expires=Sat, 18 Apr 2020 12:00:00 GMT
Set-Cookie: WMF-Last-Access=17-Mar-2020;Path=/;HttpOnly;secure;Expires=Sat, 18 Apr 2020 12:00:00 GMT
X-Client-IP: 140.114.202.20
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Set-Cookie: WMF-Last-Access=17-Mar-2020;Path=/;HttpOnly;secure;Expires=Sat, 18 Apr 2020 12:00:00 GMT
Accept-Ranges: bytes
Transfer-Encoding: chunked
Connection: keep-alive
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://ja.wikipedia.org/wiki/Async'
r = await ses.get(url)
html = await r.text()
print(len(html)) # ลองดูความยาวโค้ดทั้งหมด
print(html.count('div')) # ลองนับจำนวนคำว่า div
ss = html.split('\n') # แบ่งเป็นบรรทัด
print(len(ss)) # ลองดูจำนวนบันทัด
print('\n'.join(ss[:5])) # ลองดู 5 บรรทัดแรก
asyncio.run(aioioio())
63738
506
136
<!DOCTYPE html>
<html class="client-nojs" lang="ja" dir="ltr">
<head>
<meta charset="UTF-8"/>
<title>async - Wikipedia</title>
r.text(encoding='UTF-8')
แบบนี้หน้าเว็บก็จะถูกถอดเป็น UTF-8 ไม่ว่า charset
จะถูกกำหนดมาเป็นยังไงก็ตามasync def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://ja.wikipedia.org/wiki/IO'
r = await ses.get(url)
text = await r.text()
read = await r.read()
print(type(text)) # ได้ <class 'str'>
print(len(text)) # ได้ 33855
print(type(read)) # ได้ <class 'bytes'>
print(len(read)) # ได้ 37753
import aiohttp,asyncio,time
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://vi.wikipedia.org/wiki/'
coru_get = [ses.get(url+'%d'%i) for i in range(5)]
print('[เริ่มโหลดหน้าเว็บ] เวลาผ่านไป %.6f'%(time.time()-t0))
rr = await asyncio.gather(*coru_get)
print('[โหลดเสร็จแล้ว] เวลาผ่านไป %.6f'%(time.time()-t0))
coru_text = [r.text() for r in rr]
print('[เริ่มอ่านข้อมูล] เวลาผ่านไป %.6f'%(time.time()-t0))
htmlhtml = await asyncio.gather(*coru_text)
for i,html in enumerate(htmlhtml):
print('หน้า %s ยาว %d มี %d บรรทัด'%(rr[i].url,len(html),len(html.split('\n'))))
print('[อ่านเสร็จแล้ว] เวลาผ่านไป %.6f'%(time.time()-t0))
t0 = time.time()
asyncio.run(aioioio())
[เริ่มโหลดหน้าเว็บ] เวลาผ่านไป 0.000397
[โหลดเสร็จแล้ว] เวลาผ่านไป 0.296747
[เริ่มอ่านข้อมูล] เวลาผ่านไป 0.296778
หน้า https://vi.wikipedia.org/wiki/0 ยาว 33858 มี 273 บรรทัด
หน้า https://vi.wikipedia.org/wiki/1 ยาว 72232 มี 347 บรรทัด
หน้า https://vi.wikipedia.org/wiki/2 ยาว 62739 มี 316 บรรทัด
หน้า https://vi.wikipedia.org/wiki/3 ยาว 62227 มี 318 บรรทัด
หน้า https://vi.wikipedia.org/wiki/4 ยาว 61862 มี 316 บรรทัด
[อ่านเสร็จแล้ว] เวลาผ่านไป 0.342659
async def loadwiki(ses,url):
lek = url.split('/')[-1]
print('[หน้า %s เริ่มโหลด] เวลาผ่านไป %.6f'%(lek,time.time()-t0))
r = await ses.get(url)
print('[หน้า %s โหลดเสร็จ] เวลาผ่านไป %.6f'%(lek,time.time()-t0))
html = await r.text()
print('หน้า %s ยาว %d มี %d บรรทัด'%(url,len(html),len(html.split('\n'))))
print('[หน้า %s อ่านเสร็จ] เวลาผ่านไป %.6f'%(lek,time.time()-t0))
async def aioioio():
async with aiohttp.ClientSession() as ses:
coruru = [loadwiki(ses,'https://nl.wikipedia.org/wiki/%d'%i) for i in range(5)]
await asyncio.gather(*coruru)
t0 = time.time()
asyncio.run(aioioio())
[หน้า 0 เริ่มโหลด] เวลาผ่านไป 0.000671
[หน้า 1 เริ่มโหลด] เวลาผ่านไป 0.023000
[หน้า 2 เริ่มโหลด] เวลาผ่านไป 0.023533
[หน้า 3 เริ่มโหลด] เวลาผ่านไป 0.023896
[หน้า 4 เริ่มโหลด] เวลาผ่านไป 0.024206
[หน้า 0 โหลดเสร็จ] เวลาผ่านไป 0.276355
หน้า https://nl.wikipedia.org/wiki/0 ยาว 25283 มี 272 บรรทัด
[หน้า 0 อ่านเสร็จ] เวลาผ่านไป 0.276677
[หน้า 2 โหลดเสร็จ] เวลาผ่านไป 0.277732
[หน้า 4 โหลดเสร็จ] เวลาผ่านไป 0.279316
[หน้า 3 โหลดเสร็จ] เวลาผ่านไป 0.281153
หน้า https://nl.wikipedia.org/wiki/2 ยาว 64762 มี 382 บรรทัด
[หน้า 2 อ่านเสร็จ] เวลาผ่านไป 0.284768
หน้า https://nl.wikipedia.org/wiki/4 ยาว 66476 มี 392 บรรทัด
[หน้า 4 อ่านเสร็จ] เวลาผ่านไป 0.288138
หน้า https://nl.wikipedia.org/wiki/3 ยาว 62396 มี 374 บรรทัด
[หน้า 3 อ่านเสร็จ] เวลาผ่านไป 0.288892
[หน้า 1 โหลดเสร็จ] เวลาผ่านไป 0.294034
หน้า https://nl.wikipedia.org/wiki/1 ยาว 67829 มี 393 บรรทัด
[หน้า 1 อ่านเสร็จ] เวลาผ่านไป 0.302973
async def loadwiki(ses,url):
lek = url.split('/')[-1]
r = await ses.get(url)
with open(lek+'.html','wb') as f:
f.write(await r.read())
async def aioioio():
async with aiohttp.ClientSession() as ses:
coruru = [loadwiki(ses,'https://ko.wikipedia.org/wiki/%d'%i) for i in range(5)]
await asyncio.gather(*coruru)
asyncio.run(aioioio())
async def loadhina(ses,url):
chue_file = url.split('/')[-1]
r = await ses.get(url)
with open(chue_file,'wb') as f:
while(1):
c = await r.content.read(1024)
if(c):
f.write(c)
else:
break
async def aioioio():
async with aiohttp.ClientSession() as ses:
lis_lek = [2357144827637608,1570268969658535,2666957966656291]
coruru = [loadhina(ses,'https://hinaboshi.com/rup/rupprakopwalidet/%d.jpg'%i) for i in lis_lek]
await asyncio.gather(*coruru)
asyncio.run(aioioio())
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://th.wikipedia.org/wiki/bangkok'
coru0 = ses.get(url)
coru1 = ses.get(url,params=[('redirect','no')])
coru2 = ses.get(url,params=[('redirect','yes')])
for coru in asyncio.as_completed([coru0,coru1,coru2]):
r = await coru
html = await r.text()
print('%s\nยาว %d มี %d บรรทัด'%(r.url,len(html),len(html.split('\n'))))
asyncio.run(aioioio())
https://th.wikipedia.org/wiki/Bangkok
ยาว 693396 มี 2039 บรรทัด
https://th.wikipedia.org/wiki/bangkok?redirect=no
ยาว 23838 มี 237 บรรทัด
https://th.wikipedia.org/wiki/bangkok?redirect=yes
ยาว 693510 มี 2039 บรรทัด
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://th.wikipedia.org/w/index.php'
kham = ['python','java','ruby']
coruru = [ses.post(url,data={'search':x}) for x in kham]
rr = await asyncio.gather(*coruru)
for r in rr:
print('%s\n-> %s'%(r.history[0].url,r.url))
asyncio.run(aioioio())
https://th.wikipedia.org/w/index.php
-> https://th.wikipedia.org/wiki/Python
https://th.wikipedia.org/w/index.php
-> https://th.wikipedia.org/wiki/Java
https://th.wikipedia.org/w/index.php
-> https://th.wikipedia.org/wiki/Ruby
async def aioioio():
async with aiohttp.ClientSession() as ses:
url = 'https://qiita.com/api/v2/tags/'
tagtag = ['c','c++','csharp']
coruru = [ses.get(url+tag) for tag in tagtag]
for coru in asyncio.as_completed(coruru):
r = await coru
qjson = await r.json()
print('\n==%s=='%r.url)
for k in qjson:
print('%s = %s'%(k,qjson[k]))
asyncio.run(aioioio())
==https://qiita.com/api/v2/tags/c==
followers_count = 26303
icon_url = https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ceb54fec6cccd1711edeeccfca306a16ecf08834/medium.jpg?1481808976
id = C
items_count = 3057
==https://qiita.com/api/v2/tags/csharp==
followers_count = 29041
icon_url = https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5d80f1647ab8e9f5dde2fd4164c24cd26bfcc672/medium.jpg?1558927763
id = C#
items_count = 9190
==https://qiita.com/api/v2/tags/c++==
followers_count = 30485
icon_url = https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fe7df47710bdae8b8565b323841a6b89e2f66b89/medium.jpg?1515774066
id = C++
items_count = 7144
import multiprocessing as mp
import aiohttp,asyncio,time,requests
# ฟังก์ชันที่ใช้ multiprocessing
def load_mp(lek):
url = 'https://th.wikipedia.org/wiki/%d'%lek
r = requests.get(url)
with open('mp_%d.html'%lek,'wb') as f:
f.write(r.content)
# ฟังก์ชันที่ใช้ async
async def load_asy(ses,lek):
url = 'https://th.wikipedia.org/wiki/%d'%lek
r = await ses.get(url)
with open('asy_%d.html'%lek,'wb') as f:
f.write(await r.read())
async def main(n):
async with aiohttp.ClientSession() as ses:
coruru = [load_asy(ses,i) for i in range(n)]
await asyncio.gather(*coruru)
if(__name__=='__main__'):
t_ml = []
t_asy = []
for n in range(1,10):
# เริ่มโหลดด้วย multiprocessing
t0 = time.time()
mp.Pool(processes=n).map(load_mp,range(n))
t_ml.append(time.time()-t0) # ได้ 0.5492181777954102
# เริ่มโหลดด้วย async
t0 = time.time()
asyncio.run(main(n))
t_asy.append(time.time()-t0) # ได้ 0.35967516899108887
print(t_ml)
print(t_asy)
[0.37029385566711426, 0.36657190322875977, 0.3823528289794922, 0.39493608474731445, 0.3996908664703369, 0.4152510166168213, 0.4314148426055908, 0.44281506538391113, 0.4738590717315674]
[0.3343980312347412, 0.31613683700561523, 0.31936192512512207, 0.32141804695129395, 0.3262810707092285, 0.3238258361816406, 0.32375288009643555, 0.3356812000274658, 0.3322031497955322]
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ