Javascript 使用Apify';木偶爬虫 (*)情况:

Javascript 使用Apify';木偶爬虫 (*)情况:,javascript,jquery,puppeteer,cheerio,apify,Javascript,Jquery,Puppeteer,Cheerio,Apify,你好 我想刮,我开发一个城市,它将为我提供该城市的所有酒店。 例如,它的结果将为我们提供1200多家酒店,因此我想搜集有关这些酒店的所有信息 我使用了Apify的木偶爬虫,在开始url中,我将url放在第一页。 在链接选择器中,我将选择器置于“酒店详细信息”页面 这是我在页面功能中输入的内容: 异步函数页面函数(上下文){ const{request,log,skiplings,page}=context; //request.userData=列表链接; if(request.userDat

你好

我想刮,我开发一个城市,它将为我提供该城市的所有酒店。 例如,它的结果将为我们提供1200多家酒店,因此我想搜集有关这些酒店的所有信息

我使用了Apify的木偶爬虫,在开始url中,我将url放在第一页。 在链接选择器中,我将选择器置于“酒店详细信息”页面

这是我在页面功能中输入的内容

异步函数页面函数(上下文){ const{request,log,skiplings,page}=context; //request.userData=列表链接; if(request.userData.label=='START'){ log.info('storeopened!'); } if(request.userData.label==='DETAIL'){ const{url}=请求; log.info(`Scraping${url}`); 等待Skiplings(); 常数标题=第页$eval( “头衔”, (el=>el.textContent) ); 常数价格=第页$eval( “第JGa7fd部分”, (el=>el.getAttribute('aria-label')) ); const ratingP=第页$eval( “div.iDqPh.BgYkof”, (el=>el.textContent) ); const reviewsNumberP=第页$eval( “a.eS7K5e”, (el=>el.textContent) ); const hotelStarP=第页$eval( “div.fnmyY>span.CFH2De”, (el=>el.textContent) ); 常量adressP=第页$$eval( “第K4nuhf部分跨度CFH2De”, (els)=>els[0]。文本内容 ); const phoneP=第页$$eval( “第K4nuhf部分跨度CFH2De”, (els)=>els[2]。文本内容 ); const websiteP=第页$$eval( “a.FKF6mc.TpQm9d”, (els)=>els[0]。getAttribute('href') ); 常数[ 标题 价格, 评级 评论编号, 地址, 电话, hotelStar酒店, 网站, ]等待承诺([ 标题, 普莱斯, 评级, 回顾, 阿雷斯普, phoneP, 塔普酒店, 网站, ]); 返回{ 标题 价格, 评级 评论编号, 地址, 电话, hotelStar酒店, 网站, }; }
}我不会告诉你成功刮取的所有细节,但会给你一些提示

a) 正确的名字很重要。在本例中,您正在使用。这是一个独立的演员。是SDK(JS库)中的一个类

b) 链接选择器不会单击,它需要查找HREF(真实链接)。所以它在这个用例中不起作用

c) 在本例中,我建议使用PuppeterCrawler类创建一个新的演员(参见网站中的示例)

现在回答您的问题:

  • 您可以在Apify中使用您的代码,它的工作原理也是一样的。更高级的解决方案将允许您将负载拆分为更多的请求,用于将下一页排队。但我不能100%确定它是否能正确地用于这个用例
  • 它是同一个木偶演员实例,因此没有任何限制。Apify取决于
    木偶师
  • 唯一的区别是Apify使在Puppeter中使用经过身份验证的代理变得简单,否则,情况也是一样的。当然,PuppeterCrawler为您提供了大量功能,如自动缩放并发、重试、代理旋转、会话等

  • 我不会给你所有的细节,为刮成功,但会给你一些提示

    a) 正确的名字很重要。在本例中,您正在使用。这是一个独立的演员。是SDK(JS库)中的一个类

    b) 链接选择器不会单击,它需要查找HREF(真实链接)。所以它在这个用例中不起作用

    c) 在本例中,我建议使用PuppeterCrawler类创建一个新的演员(参见网站中的示例)

    现在回答您的问题:

  • 您可以在Apify中使用您的代码,它的工作原理也是一样的。更高级的解决方案将允许您将负载拆分为更多的请求,用于将下一页排队。但我不能100%确定它是否能正确地用于这个用例
  • 它是同一个木偶演员实例,因此没有任何限制。Apify取决于
    木偶师
  • 唯一的区别是Apify使在Puppeter中使用经过身份验证的代理变得简单,否则,情况也是一样的。当然,PuppeterCrawler为您提供了大量功能,如自动缩放并发、重试、代理旋转、会话等

  • 非常感谢你的回复。事实上,我尝试使用enqueueLinksByClickingElements()方法,但没有成功,我选择了正确的选择器,但没有任何好的答案。我可以使用pptr方法(page.url(),page.click())然后编写一个函数,并将其与enqueueLinksByClickingElements()方法交换吗,或者我不得不使用这种方法?如果它因任何原因不起作用,我可能会将它与page.click()放在一个页面上。当然,您可以自己重新实现所有功能。非常感谢您的回复。事实上,我尝试使用enqueueLinksByClickingElements()方法,但没有成功,我选择了正确的选择器,但没有任何好的答案。我可以使用pptr方法(page.url(),page.click())然后编写一个函数,并将其与enqueueLinksByClickingElements()方法交换吗,或者我不得不使用这种方法?如果它因任何原因不起作用,我可能会将它与page.click()放在一个页面上。当然,您可以自己重新实现所有功能。