使用jQuery抓取网站是否需目标站点引入?Gumtree爬取报错求助
解答你的两个jQuery爬虫问题
问题1:使用jQuery抓取网站时,目标网站是否需要引入jQuery?
答案是不需要——完全不用依赖目标网站本身加载jQuery。我们在爬虫脚本里可以主动把jQuery注入到目标页面的执行环境中,不管原网站有没有引入它。毕竟咱们是在控制浏览器/无头浏览器环境,有能力自行添加需要的资源。
问题2:Nightmare.js中遇到$ is not defined的报错,是否需要目标网站引入jQuery?
这个报错的核心原因是当前页面环境里没有jQuery,跟目标网站本身加不加没关系。你需要在自己的Nightmare脚本里手动注入jQuery,步骤大概是这样:
- 先用
goto方法打开目标页面 - 调用
inject方法把jQuery脚本注入到页面里 - 之后再在
evaluate里使用$来操作DOM
举个简单的示例代码:
const Nightmare = require('nightmare'); const nightmare = Nightmare({ show: true }); nightmare .goto('https://www.gumtree.com.au/') .inject('script', 'http://code.jquery.com/jquery-1.7.1.min.js') // 注入jQuery到页面环境 .evaluate(() => { // 现在可以正常用$来操作DOM了 return $('.ad-listing').map((i, el) => $(el).find('.title').text()).get(); }) .end() .then(result => console.log('抓取到的广告标题:', result)) .catch(error => console.error('抓取出错:', error));
这里的inject方法会把指定的jQuery脚本加载到当前页面的执行环境里,之后evaluate中的代码就能识别$变量了,完全不需要依赖目标网站自行引入jQuery。
内容的提问来源于stack exchange,提问作者Aidan el Goste
相关产品推荐
相关产品推荐

