Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 脚本在执行过程中的某个点抛出一些错误_Python_Web Scraping_Puppeteer_Pyppeteer_Python Asyncio - Fatal编程技术网

Python 脚本在执行过程中的某个点抛出一些错误

Python 脚本在执行过程中的某个点抛出一些错误,python,web-scraping,puppeteer,pyppeteer,python-asyncio,Python,Web Scraping,Puppeteer,Pyppeteer,Python Asyncio,我已经用python创建了一个脚本,用于从网页收集不同帖子的链接,然后通过进入目标页面重用这些收集的链接来解析每个帖子的标题。虽然内容是静态的,但我想知道pyppeteer在这种情况下是如何工作的 我试图从main函数中提供这个浏览器变量来获取和浏览所有链接函数,这样我就可以反复使用同一个浏览器 我目前的做法是: import asyncio from pyppeteer import launch url = "https://stackoverflow.com/questions/tagg

我已经用python创建了一个脚本,用于从网页收集不同帖子的链接,然后通过进入目标页面重用这些收集的链接来解析每个帖子的标题。虽然内容是静态的,但我想知道pyppeteer在这种情况下是如何工作的

我试图从main函数中提供这个浏览器变量来获取和浏览所有链接函数,这样我就可以反复使用同一个浏览器

我目前的做法是:

import asyncio
from pyppeteer import launch

url = "https://stackoverflow.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=[等待浏览所有链接页面,链接中url的url]您希望这个列表是什么?如果成功,它将是一个列表 没有任何元素。因此,您的下一行代码将抛出错误

解决方案

将websockets 7.0降级为websockets 6.0

删除这行代码等待asyncio.gather*任务

我使用的是Python3.6,所以我不得不更改最后一行代码。 如果您使用的是python 3.7(我认为您正在使用),则不需要更改它

输出 testenv C:\Py\pypuppeter1>pythonstack3.Py Scrapy Shell response.css返回一个空数组 刮擦式实时蜘蛛 为什么在使用get请求读取数据时获取KeyError? Scrapy spider无法根据参数重新定义自定义\u设置 在Splash UI中使用Lua的自定义JS脚本 有人能解释一下这段代码的工作原理吗 如何从字符串列表中提取所需数据? 用于抓取单个页面的Scrapy CrawlSpider规则 当搜索查询不存在时,如何使用搜索栏结果刮取网页 出现在url中 嵌套for循环不断重复 获取除标签列表外的所有标签 使用Python和webbot获取当前URL 如何登录到站点并发送数据 无法将值附加到列。获取错误索引器错误:从ra中获取列表索引 nge NextSibling.Innertext不工作。“对象不支持此属性”


我看到你正在抓取href。这可能不是完整的url,即可能是/contact而不是http://www.example.com/contact. 在前面的案例中没有指定协议,因此它抛出了一个错误,这是我怀疑的。你错了@Vishnudev。当任何浏览器模拟器开始运行时,大多数情况下检索到的URL都是完整的,就像我在本例中看到的一样。哦,好的。我只是怀疑。如果链接可以正常工作,那么我不知道为什么会出现这种情况。我甚至从未听说过这个工具包,但我看到的第一个谷歌结果似乎是相关的。从comment.@robots.txt开始,为什么要使用标签?已有包含2000多个问题的标记。您的解决方案似乎有效,但不一致。当我尝试几次时,脚本在最后一个或第二个抛出pyppeteer.errors.TimeoutError的最后一个或第二个结果之前卡住:超过导航超时:超过30000毫秒。。你建议我不要删除最后一行代码。您的意思是等待asyncio.gather*任务不删除吗?最后,我真的不知道如何将websockets 7.0降级为websockets 6.0。顺便说一句,你怎么知道我在使用python 3.7?谢谢。不用了,您可以删除wait asyncio.gather*任务并告诉我。asyncio.runmain仅适用于python 3.7或更高版本。您在测试中使用了这一行代码,这就是为什么我猜测我可能使用的是python 3.7,在我给您反馈时,我没有使用wait asyncio.gather*任务。我可以不使用try/except子句来处理这个错误吗?然而,我不知道如何在异步IO模式中使用错误处理程序。顺便问一下,是否有必要将websockets 7.0降级为websockets 6.0?如果是,那怎么办?非常感谢。我正在使用Python3.6,对我来说有必要将websockets 7降级为6。试试看。python-m卸载websockets,然后python-m安装websockets==6.0