【发布时间】:2021-07-25 22:00:58
【问题描述】:
我正在尝试使用 RequestSetIntercept 函数 使用 Pyppeteer 加快网页加载速度。
但是我收到了警告:
RuntimeWarning:从未等待协程“block_image”
我不知道我在哪里错过了等待。 我已经按照我在网上找到的模板添加了带有拦截功能本身的等待。我正在测试 使用 Pyppeeteer 的 setIntercept 函数。
谢谢。
#utils.py
class MakeRequest():
ua = User_Agent()
async def _proxy_browser(self, url,
headless = False,
intercept_func = None,
proxy = True,
**kwargs):
if proxy:
args = [*proxy*
'--ignore-certificate-errors']
else:
args = ['--ignore-certificate-errors']
for i in range(3):
try:
browser = await launch(headless = headless,
args = args,
defaultViewport = None)
page = await browser.newPage()
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0')
if intercept_func is not None:
await page.setRequestInterception(True)
page.on('request', intercept_func)
await page.goto(url, {'waitUntil' : 'load', 'timeout': 0 })
content = await page.content()
return content
except (pyppeteer.errors.PageError,
pyppeteer.errors.TimeoutError,
pyppeteer.errors.BrowserError,
pyppeteer.errors.NetworkError) as e:
print('error', e)
time.sleep(2)
continue
finally:
await browser.close()
return
scraper.py:
REQUESTER = MakeRequest()
async def block_image(request):
if request.url.endswith('.png') or request.url.endswith('.jpg'):
print(request.url)
await request.abort()
else:
await request.continue_()
def get_request(url):
for i in range(3):
response = REQUESTER.proxy_browser_request(url = url,
headless = False,
intercept_func = block_image)
if response:
return response
else:
print(f'Attempt {i +1} : {url}links not found')
print('retrying...')
time.sleep(3)
【问题讨论】:
-
asyncio.run(REQUESTER.proxy_browser_request(url = url,...)? -
@bdbdb 试过了,但似乎没有删除警告。
标签: python-3.x web-scraping pyppeteer