尝试使用 Pyppeteer 的爬虫功能怎么样, 结果浏览器都没有打开,唉;
源代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import asyncio
from pyppeteer import launch
async def main():
browser = await launch(headless=False)
page = await browser.newPage()
await page.goto("https://www.dandanzan10.top/dianying/") # https://www.python.org
# await page.screenshot(path="yvain.png") #
time.sleep(3)
await page.screenshot({"path": "yvain.png"})
print(page.content()) # 无法打印内容
await browser.close()
print("Starting...")
# asyncio.create_task(main())
asyncio.ensure_future(main())
print("Screenshots has been taken.")
问题如下: 0. 没有报错...感觉什么都没有发生
使用了browser = await launch(headless=False)
根本没有打开浏览器;
也没有截图page.screenshot
;
也没有任何内容打印page.content()
使用 vscode/pycharm 运行的结果如上: 0-4 条;
使用 Jupyter 运行还报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
, 但是会有个 Chromium 打开了, 但是没有任何动作.
其他: create_task()
函数会报错, 才使用ensure_future()
谁能帮帮我, 找不到什么原因了, 爬虫的第一步访问网页都搞不定. 唉
1
raycool 2022-10-16 22:19:09 +08:00
协程没有运行
|
3
tuiL2 2022-10-16 22:28:15 +08:00
asyncio.run(main())
|
4
wyzh97 OP @tuiL2 最后面直接添加: `asyncio.run(main())`, 提示出错啊 `RuntimeError: Event loop is closed`,
|
5
shinonome 2022-10-16 23:17:40 +08:00
为啥不同步运行- -
|
6
q409195961 2022-10-16 23:21:28 +08:00
asyncio.get_event_loop().run_until_complete(main())
|
7
zeusho871 2022-10-17 08:15:27 +08:00 via Android
这年头用什么 pyppeteer 兄弟,试试 playwright ?
|
8
ghh617415200 2022-10-17 09:42:05 +08:00
|
9
ghh617415200 2022-10-17 09:42:57 +08:00
pyppeteer 使用 pip 安装后还需要一步:pyppeteer-install 你这一步执行过嘛?刚刚试了一下,代码确实是没有问题的
|
10
zhejiangblue 2022-10-17 11:23:27 +08:00
```python
async def main(): browser = await launch(headless=False) page = await browser.newPage() await page.goto("https://www.dandanzan10.top/dianying/") # https://www.python.org # await page.screenshot(path="yvain.png") # await asyncio.sleep(3) await page.screenshot({"path": "yvain.png"}) print(await page.content()) await browser.close() if __name__ == '__main__': print("Starting...") # asyncio.create_task(main()) # asyncio.ensure_future(main()) asyncio.run(main()) print("Screenshots has been taken.") ``` 问题解答: 1. 没有打开浏览器:协程没有运行 2. 同上 3. 同上,外加 page.content() 是个协程对象,因此需要 await 6. 使用 create_task 前 必须要有 event_loop ,这个函数作用是创建 Task 对象,并立即加入到事件循环的 loop 中,如果 loop 为 None ,就会报错; ensure_future 是将协程对象或可等待对象包装成一个 Future 对象,loop 为空不会报错 另外, - 协程中一般不用 time.sleep ,它不支持协程自动切换 |
11
masker 2022-10-17 12:06:07 +08:00 via Android
launch (options={'args':['--no-sandbox']})
|
12
wyzh97 OP @zhejiangblue 谢谢大哥前辈的悉心指导, 关于异步 /协程这块一直不太熟悉, 请教下在哪里详细的学习这个呢? (B 站很多都是入门的不怎么系统的教程), 谢谢了
|
13
zhejiangblue 2022-12-30 10:56:18 +08:00
|