脚本在执行过程中的某个时刻抛出一些错误
Script throws some error at some point within the execution
我在 python 中使用 pyppeteer 创建了一个脚本来收集不同 posts 来自网页,然后通过重用这些收集的链接进入目标页面来解析每个 post 的标题。虽然内容是静态的,但我想知道 pyppeteer 在这种情况下是如何工作的。
我试图将这个 browser
变量从 main()
函数提供给 fetch()
和 browse_all_links()
函数,这样我就可以一遍又一遍地重复使用同一个浏览器。
我目前的做法:
import asyncio
from pyppeteer import launch
url = "https://whosebug.com/questions/tagged/web-scraping"
async def fetch(page,url):
await page.goto(url)
linkstorage = []
await page.waitForSelector('.summary .question-hyperlink')
elements = await page.querySelectorAll('.summary .question-hyperlink')
for element in elements:
linkstorage.append(await page.evaluate('(element) => element.href', element))
return linkstorage
async def browse_all_links(page,link):
await page.goto(link)
await page.waitForSelector('h1 > a')
title = await page.querySelectorEval('h1 > a','(e => e.innerText)')
print(title)
async def main():
browser = await launch(headless=False,autoClose=False)
[page] = await browser.pages()
links = await fetch(page,url)
tasks = [await browse_all_links(page,url) for url in links]
await asyncio.gather(*tasks)
if __name__ == '__main__':
asyncio.run(main())
上面的脚本获取了一些标题,但在执行过程中的某个时刻出现了以下错误:
Possible to select <a> with specific text within the quotes?
Crawler Runs Too Slow
How do I loop a list of ticker to scrape balance sheet info?
How to retrive the url of searched video from youtbe using python
VBA-JSON to import data from all pages in one table
Is there an algorithm that detects semantic visual blocks in a webpage?
find_all only scrape the last value
#ERROR STARTS
Future exception was never retrieved
future: <Future finished exception=NetworkError('Protocol error (Runtime.releaseObject): Cannot find context with specified id')>
pyppeteer.errors.NetworkError: Protocol error (Runtime.releaseObject): Cannot find context with specified id
Future exception was never retrieved
因为这个问题已经发布两天了,还没有人回答,我会借此机会解决这个问题
认为可能对你有帮助。
有 15 个链接,但你只得到 7 个,这可能是 websockets 正在失去连接,页面无法再访问
列表理解
tasks = [await browse_all_links(page,url) for url in links]
期望这个列表是什么?如果成功,它将是一个列表
none 个元素。所以你的下一行代码会抛出错误!
解决方案
将 websockets 7.0 降级到 websockets 6.0
去掉这行代码await asyncio.gather(*tasks)
我正在使用 python 3.6,所以我不得不更改最后一行代码。
如果您使用的是 python 3.7,我认为您使用的是
,则无需更改它
import asyncio
from pyppeteer import launch
url = "https://whosebug.com/questions/tagged/web-scraping"
async def fetch(page,url):
await page.goto(url)
linkstorage = []
await page.waitForSelector('.summary .question-hyperlink')
elements = await page.querySelectorAll('.summary .question-hyperlink')
for element in elements:
linkstorage.append(await page.evaluate('(element) => element.href', element))
return linkstorage
async def browse_all_links(page,link):
await page.goto(link)
await page.waitForSelector('h1 > a')
title = await page.querySelectorEval('h1 > a','(e => e.innerText)')
print(title)
async def main():
browser = await launch(headless=False,autoClose=False)
[page] = await browser.pages()
links = await fetch(page,url)
tasks = [await browse_all_links(page,url) for url in links]
#await asyncio.gather(*tasks)
await browser.close()
if __name__ == '__main__':
#asyncio.run(main())
asyncio.get_event_loop().run_until_complete(main())
- 输出
(testenv) C:\Py\pypuppeteer1>python stack3.py
Scrapy Shell response.css returns 一个空数组
Scrapy real-time 蜘蛛
为什么在使用 get 请求读取数据时会出现 KeyError?
Scrapy spider 无法根据args重新定义custom_settings
在 Splash UI 中使用 Lua 的自定义 JS 脚本
有人可以解释这段代码为什么以及如何工作[待定]
如何从字符串列表中提取所需数据?
Scrapy CrawlSpider爬取单页规则
如何 scrape a web-page with search bar results, when the search query doesn't
出现在 url
嵌套for循环不断重复
获取除标签列表之外的所有标签 BeautifulSoup
使用 Python 和 webbot 获取当前 URL
如何登录网站并发送数据
无法将值附加到列。出现错误 IndexError: list index out of ra
恩格
NextSibling.Innertext 不工作。 “对象不支持这个 属性”
我在 python 中使用 pyppeteer 创建了一个脚本来收集不同 posts 来自网页,然后通过重用这些收集的链接进入目标页面来解析每个 post 的标题。虽然内容是静态的,但我想知道 pyppeteer 在这种情况下是如何工作的。
我试图将这个 browser
变量从 main()
函数提供给 fetch()
和 browse_all_links()
函数,这样我就可以一遍又一遍地重复使用同一个浏览器。
我目前的做法:
import asyncio
from pyppeteer import launch
url = "https://whosebug.com/questions/tagged/web-scraping"
async def fetch(page,url):
await page.goto(url)
linkstorage = []
await page.waitForSelector('.summary .question-hyperlink')
elements = await page.querySelectorAll('.summary .question-hyperlink')
for element in elements:
linkstorage.append(await page.evaluate('(element) => element.href', element))
return linkstorage
async def browse_all_links(page,link):
await page.goto(link)
await page.waitForSelector('h1 > a')
title = await page.querySelectorEval('h1 > a','(e => e.innerText)')
print(title)
async def main():
browser = await launch(headless=False,autoClose=False)
[page] = await browser.pages()
links = await fetch(page,url)
tasks = [await browse_all_links(page,url) for url in links]
await asyncio.gather(*tasks)
if __name__ == '__main__':
asyncio.run(main())
上面的脚本获取了一些标题,但在执行过程中的某个时刻出现了以下错误:
Possible to select <a> with specific text within the quotes?
Crawler Runs Too Slow
How do I loop a list of ticker to scrape balance sheet info?
How to retrive the url of searched video from youtbe using python
VBA-JSON to import data from all pages in one table
Is there an algorithm that detects semantic visual blocks in a webpage?
find_all only scrape the last value
#ERROR STARTS
Future exception was never retrieved
future: <Future finished exception=NetworkError('Protocol error (Runtime.releaseObject): Cannot find context with specified id')>
pyppeteer.errors.NetworkError: Protocol error (Runtime.releaseObject): Cannot find context with specified id
Future exception was never retrieved
因为这个问题已经发布两天了,还没有人回答,我会借此机会解决这个问题 认为可能对你有帮助。
有 15 个链接,但你只得到 7 个,这可能是 websockets 正在失去连接,页面无法再访问
列表理解
tasks = [await browse_all_links(page,url) for url in links]
期望这个列表是什么?如果成功,它将是一个列表
none 个元素。所以你的下一行代码会抛出错误!
解决方案
将 websockets 7.0 降级到 websockets 6.0
去掉这行代码
await asyncio.gather(*tasks)
我正在使用 python 3.6,所以我不得不更改最后一行代码。 如果您使用的是 python 3.7,我认为您使用的是
,则无需更改它
import asyncio
from pyppeteer import launch
url = "https://whosebug.com/questions/tagged/web-scraping"
async def fetch(page,url):
await page.goto(url)
linkstorage = []
await page.waitForSelector('.summary .question-hyperlink')
elements = await page.querySelectorAll('.summary .question-hyperlink')
for element in elements:
linkstorage.append(await page.evaluate('(element) => element.href', element))
return linkstorage
async def browse_all_links(page,link):
await page.goto(link)
await page.waitForSelector('h1 > a')
title = await page.querySelectorEval('h1 > a','(e => e.innerText)')
print(title)
async def main():
browser = await launch(headless=False,autoClose=False)
[page] = await browser.pages()
links = await fetch(page,url)
tasks = [await browse_all_links(page,url) for url in links]
#await asyncio.gather(*tasks)
await browser.close()
if __name__ == '__main__':
#asyncio.run(main())
asyncio.get_event_loop().run_until_complete(main())
- 输出
(testenv) C:\Py\pypuppeteer1>python stack3.py Scrapy Shell response.css returns 一个空数组 Scrapy real-time 蜘蛛 为什么在使用 get 请求读取数据时会出现 KeyError? Scrapy spider 无法根据args重新定义custom_settings 在 Splash UI 中使用 Lua 的自定义 JS 脚本 有人可以解释这段代码为什么以及如何工作[待定] 如何从字符串列表中提取所需数据? Scrapy CrawlSpider爬取单页规则 如何 scrape a web-page with search bar results, when the search query doesn't 出现在 url 嵌套for循环不断重复 获取除标签列表之外的所有标签 BeautifulSoup 使用 Python 和 webbot 获取当前 URL 如何登录网站并发送数据 无法将值附加到列。出现错误 IndexError: list index out of ra 恩格 NextSibling.Innertext 不工作。 “对象不支持这个 属性”