前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Puppeteer教程:使用CSS选择器点击和爬取动态数据

Puppeteer教程:使用CSS选择器点击和爬取动态数据

原创
作者头像
jackcode
发布于 2024-11-14 07:21:35
发布于 2024-11-14 07:21:35
31403
代码可运行
举报
文章被收录于专栏:爬虫资料爬虫资料
运行总次数:3
代码可运行
爬虫代理
爬虫代理

1. 前言

在现代的网页中,许多数据是通过JavaScript动态加载的,这使得传统的爬虫工具(如requestsBeautifulSoup)无法获取到这些数据。因此,为了更好地处理动态网站的数据爬取,我们需要使用像Puppeteer这样的浏览器自动化工具。

本文将介绍如何使用Puppeteer结合CSS选择器,实现对动态网页的交互操作,并爬取贝壳网的二手房价格数据。为了提高爬虫的成功率,我们还将结合爬虫代理,通过代理IP提高采集效率。

2. Puppeteer简介

2.1 什么是Puppeteer?

Puppeteer 是一个由 Google 官方推出的 Node.js 库,用于控制 Chromium 或 Chrome 浏览器。它支持各种浏览器自动化任务,例如截屏、生成PDF、页面爬取和测试自动化。

2.2 Puppeteer的优势

  • 渲染JavaScript:可以抓取动态加载的数据。
  • 模拟用户操作:可以点击、输入、滚动等操作,适合处理需要用户交互的页面。
  • 支持无头浏览器:可以以无界面模式运行,效率高。

3. 环境准备

3.1 安装Node.js

在开始之前,请确保已安装Node.js,可以通过以下命令检查版本:

代码语言:bash
AI代码解释
复制
node -v
npm -v

3.2 安装Puppeteer

在项目目录下,使用以下命令安装Puppeteer:

代码语言:bash
AI代码解释
复制
npm install puppeteer

3.3 安装代理库

为了使用代理IP,我们将安装proxy-chain库:

代码语言:bash
AI代码解释
复制
npm install proxy-chain

4. 代码实现

我们将以贝壳网为目标网站,爬取北京市二手房的价格数据,并使用爬虫代理进行代理配置。

4.1 代理配置

爬虫代理提供以下参数:

  • 代理域名proxy.16yun.cn
  • 端口8000
  • 用户名yourUsername
  • 密码yourPassword

4.2 完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');

(async () => {
    // 配置16yun爬虫代理 
    const proxyUrl = 'http://yourUsername:yourPassword@proxy.16yun.cn:8000';
    const newProxyUrl = await proxyChain.anonymizeProxy(proxyUrl);

    // 启动 Puppeteer 浏览器
    const browser = await puppeteer.launch({
        headless: true, // 无头模式
        args: [`--proxy-server=${newProxyUrl}`] // 使用代理服务器
    });

    const page = await browser.newPage();

    // 设置页面视口
    await page.setViewport({ width: 1200, height: 800 });

    // 访问贝壳网二手房列表页面
    const url = 'https://bj.ke.com/ershoufang/';
    await page.goto(url, { waitUntil: 'networkidle2' });

    // 等待页面加载并选择价格元素
    await page.waitForSelector('.sellListContent .priceInfo .totalPrice .number');

    // 获取二手房列表的价格数据
    const prices = await page.$$eval('.sellListContent .priceInfo .totalPrice .number', elements =>
        elements.map(el => el.textContent.trim())
    );

    // 获取标题
    const titles = await page.$$eval('.sellListContent .title a', elements =>
        elements.map(el => el.textContent.trim())
    );

    // 数据展示
    console.log('抓取到的二手房价格数据:');
    prices.forEach((price, index) => {
        console.log(`房源 ${index + 1}: 标题 - ${titles[index]}, 价格 - ${price} 万元`);
    });

    // 关闭浏览器
    await browser.close();
})();

4.3 代码解析

  1. 代理配置:通过proxyChain库配置代理IP,确保请求通过爬虫代理,避免IP被限制。
  2. 页面加载:使用waitForSelector等待页面加载完成,确保动态数据已经渲染。
  3. 数据提取:使用CSS选择器获取价格和标题数据,通过$$eval方法提取页面中的文本内容。

4.4 常见问题与解决方案

  1. 页面加载失败
    • 原因:代理IP连接不稳定或页面加载时间过长。
    • 解决方案:调整goto方法的超时时间,如{timeout: 60000}
  2. 选择器找不到元素
    • 原因:页面结构发生变化。
    • 解决方案:使用浏览器开发者工具重新分析页面,更新选择器。

5. 数据趋势分析

我们爬取了一定数量的二手房价格数据后,可以进行简单的数据分析,了解北京市二手房价格的分布趋势。以下是使用Python进行趋势分析的简单代码示例。

5.1 数据保存

将爬取的数据保存到data.json文件中,格式如下:

代码语言:json
AI代码解释
复制
[
    {"title": "北京某小区一居室", "price": "800"},
    {"title": "北京某小区二居室", "price": "1200"}
]

5.2 数据分析与可视化

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import json
import matplotlib.pyplot as plt

# 读取数据
with open('data.json', 'r') as file:
    data = json.load(file)

# 提取价格数据
prices = [int(item['price']) for item in data]
titles = [item['title'] for item in data]

# 绘制价格趋势图
plt.figure(figsize=(10, 6))
plt.plot(range(len(prices)), prices, marker='o')
plt.title('北京市二手房价格趋势')
plt.xlabel('房源编号')
plt.ylabel('价格 (万元)')
plt.grid()
plt.show()

5.3 结果分析

从价格趋势图中可以看出,北京市二手房价格存在一定的波动,具体趋势需要结合更多的数据样本和时间段进行深入分析。可以使用更多的数据分析工具(如Pandas)进行详细的统计分析。

6. 总结

本文详细介绍了如何使用Puppeteer结合CSS选择器实现对动态网页的数据爬取,并且通过代理IP技术规避反爬机制,确保爬虫的稳定性和成功率。我们以贝壳网为例,抓取了二手房价格数据,并进行了简单的趋势分析。

6.1 优化建议

  1. 代理IP轮换:可以使用多个代理IP进行轮换,避免因使用单一IP被封禁。
  2. 数据存储:可以使用MongoDBMySQL数据库进行数据持久化存储。
  3. 分布式爬取:结合Redis等任务队列工具,实现分布式爬取,提高爬取效率。

通过本文的学习,希望大家能够掌握使用Puppeteer进行动态网页爬取的基本方法,并能应用于实际项目中。Happy Coding!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
在网络数据爬取中,如何精准、有效地抓取网页中的关键元素是核心问题之一。尤其对于动态网页来说,JavaScript渲染的内容无法通过传统的静态爬虫工具(如 requests、BeautifulSoup 等)获取。因此,使用能够控制浏览器的自动化工具 Puppeteer 就成了一种理想选择。
jackcode
2024/11/19
2210
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
用Puppeteer点击与数据爬取:实现动态网页交互
在数据采集领域,传统的静态网页爬虫方式难以应对动态加载的网页内容。动态网页通常依赖JavaScript加载数据,用户需要与页面交互才能触发内容显示。因此,我们需要一种更智能的爬虫技术。Puppeteer作为强大的浏览器自动化工具,能模拟用户操作、加载动态数据、实现点击操作和内容采集。此外,为了提高抓取成功率并避免IP封禁,结合代理IP技术必不可少。本文将介绍如何使用Puppeteer和代理IP抓取51job招聘信息,同时从招聘信息的价值、市场应用以及大数据分析角度进行拓展。
jackcode
2024/11/06
2370
用Puppeteer点击与数据爬取:实现动态网页交互
Python爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!
最近看到一句话,感觉很扎心,这句话是”任何一个男孩子小时候的梦想,绝对不是买套房“。
可以叫我才哥
2021/08/05
1K0
优化数据的抓取规则:减少无效请求
在爬取房价信息的过程中,如何有效过滤无效链接、减少冗余请求,是提升数据抓取效率的关键。本文将介绍如何优化爬虫抓取贝壳等二手房平台中的房价、小区信息,并通过代理IP、多线程、User-Agent和Cookies的设置,确保数据抓取的稳定性与高效性。最后,我们会给出一个结合代理IP技术的Python爬虫代码示例,专门用于采集房价信息。
jackcode
2024/09/18
2280
python爬虫爬取链家二手房信息
  一种有想做个爬虫的想法,正好上个月有足够的时间和精力就学了下scrapy,一个python开源爬虫框架。好多事开始以为很难,但真正下定决心去做的时候,才发现非常简单,scrapy我从0基础到写出第一个可用的爬虫只用了两天时间,从官网实例到我的demo,真是遇到一堆问题,通过查docs查博客,一个个问题解决下来,发现已经渐渐熟知了这个框架,真是发现带着问题去学习才是快的学习方式。   大学的时候有用python写过爬虫,但没用什么框架,用urllib把网页源码down下来后,写一堆正则表达式来提取其中的内容,真是快吐了。所以我一直觉得爬虫网页内容解析才是最麻烦的地方,scrapy提供xpath的方式提取网页内容,大大简化了爬虫的开发。另外,我们自己实现爬虫还要去管理所有的爬取动作,你爬取完这页,你还得去触发下一页,为了防止被ban,你还要构造header头,设置爬取规则…… scrapy简化了这一切,你只需要告诉它你要爬什么,要哪些数据,数据怎么保存即可。你只需要专注于爬取结果就好了,剩下的写middleware、pipline、item…… 简单的爬虫甚至不需要这些。   我用scrapy实现了一个爬取链家二手房的爬虫,全部源码我已经放到github上了https://github.com/xindoo/ershoufang。我需要声明的是这只是个简答的demo,存在一些问题,接下来我先说明有哪些问题,再来看看核心代码。
xindoo
2021/01/22
1.5K0
使用Puppeteer爬取地图上的用户评价和评论
在互联网时代,获取用户的反馈和意见是非常重要的,它可以帮助我们了解用户的需求和喜好,提高我们的产品和服务质量。有时候,我们需要从地图上爬取用户对某些地点或商家的评价和评论,这样我们就可以分析用户对不同地区或行业的态度和偏好。但是,如何从地图上爬取用户评价和评论呢?本文将介绍一种使用Puppeteer的方法,它是一个基于Node.js的库,可以控制Chrome或Chromium浏览器进行各种操作,包括爬虫。
jackcode
2023/09/06
5430
使用Puppeteer爬取地图上的用户评价和评论
使用python和Selenium进行数据分析:北京二手房房价
北京二手房市场是一个热门的话题,许多人都想了解北京二手房的价格走势、供需情况和影响因素。然而,要获取北京二手房的相关数据并不容易,因为一些网站可能会限制访问、设置验证码或阻止抓取。为了解决这个问题,我们可以使用python和Selenium这两个强大的工具,来进行代理IP网页采集和数据分析。
jackcode
2023/07/03
3900
使用python和Selenium进行数据分析:北京二手房房价
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
在数据驱动的时代,招生数据为学生和教育机构提供了许多宝贵的信息。通过分析和挖掘各大学的招生数据(如录取率、标准化考试分数、班级排名和高中平均绩点),不仅能帮助学生做出合理的选择,还能为教育政策的制定提供依据。本文将介绍如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。
jackcode
2024/11/05
2240
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
使用python进行北京二手房信息数据分析及可视化展示
之前我们爬取了贝壳找房上的北京二手房信息,具体可以查看python爬取贝壳找房之北京二手房源信息,现在我们针对获取的数据进行分析及可视化的展示,本文代码和数据均存放在github上,链接地址:贝壳找房数据分析源码及数据,更多内容可查看个人博客:大圣的专属空间
用户7886150
2020/12/25
1.4K0
如何利用 Puppeteer 的 Evaluate 函数操作网页数据
在现代的爬虫技术中,Puppeteer 因其强大的功能和灵活性而备受青睐。Puppeteer 是一个用于控制 Chromium 或 Chrome 浏览器的 Node.js 库,提供了丰富的 API 接口,能够帮助开发者高效地处理动态网页数据。本文将重点讲解 Puppeteer 的 evaluate 函数,结合代理 IP 技术,演示如何采集目标网站(如界面新闻)上的文章标题和摘要。
jackcode
2024/11/21
1830
如何利用 Puppeteer 的 Evaluate 函数操作网页数据
多语言爬虫实现网站价格监控
最近突发奇想想用多种代码来爬取数据做价格监控。常见的比如Python、JavaScript(Node.js)、或者Go?不过通常来说,Python应该是首选,因为它的库比较丰富,比如requests和BeautifulSoup,或者Scrapy。不过客户要求多种代码,所以我应该涵盖至少几种不同的方法。
华科云商小徐
2025/05/08
1320
数据分析实战—北京二手房房价分析
目的:本篇给大家介绍一个数据分析的初级项目,目的是通过项目了解如何使用Python进行简单的数据分析。
Python数据科学
2018/08/06
2K0
数据分析实战—北京二手房房价分析
对不起,我把APP也给爬了
最近群里很多小伙伴对爬取手机app和小程序感兴趣,今天本厨师将给大家呈现这道菜,供小伙伴们品尝。
朱小五
2020/05/25
5270
对不起,我把APP也给爬了
一名合格的数据分析师该怎样解释“买不起房”这件事?
北京很大,大到容得下两千多万人的吃喝拉撒睡。北京很小,小到装不下一个外地人的北漂梦。 我是一名北漂,来北京7年了,7年时间里不断地租房搬家,心里一直想买一套自己的房子,而北京的房价让我望而却步,打消了
CDA数据分析师
2018/02/08
5750
一名合格的数据分析师该怎样解释“买不起房”这件事?
Scrapy爬取二手房信息+可视化数据分析
本篇介绍一个scrapy的实战爬虫项目,并对爬取信息进行简单的数据分析。目标是北京二手房信息,下面开始分析。
Python数据科学
2018/08/06
1.1K0
Scrapy爬取二手房信息+可视化数据分析
如何使用Puppeteer进行新闻网站数据抓取和聚合
Puppeteer是一个基于Node.js的库,它提供了一个高级的API来控制Chrome或Chromium浏览器。通过Puppeteer,我们可以实现各种自动化任务,如网页截图、PDF生成、表单填写、网络监控等。本文将介绍如何使用Puppeteer进行新闻网站数据抓取和聚合,以网易新闻和杭州亚运会为例。
jackcode
2023/08/30
7120
如何使用Puppeteer进行新闻网站数据抓取和聚合
链家全国房价数据分析 : 数据获取
最近一直在看论文,也有很久没有coding了,感觉对爬虫的技术有些生疏,我觉得即使现在手头没有在做这方面的东西,经常爬点对技术保鲜还是很重要的。所以这次我打算爬链家的房价数据,目的主要是对爬虫和Python的东西作一个巩固,然后做一个分析。
vincentbbli
2021/08/18
1.1K0
教你用python制作一个爬虫软件,城市二手房信息一览无余。。(附源码)
教你用python制作一个爬虫软件,城市二手房信息一览无余。。(附源码)
Java架构师必看
2021/07/19
1.2K0
教你用python制作一个爬虫软件,城市二手房信息一览无余。。(附源码)
捕获抖音截图:如何用Puppeteer保存页面状态
随着短视频和直播平台的快速发展,抖音(Douyin)已经成为全球数亿用户的娱乐选择。尤其是在抖音直播中,实时动态和互动元素吸引了大量用户的目光。然而,作为开发者或数据分析师,有时我们需要捕获抖音直播页面的状态,获取实时信息,或进行数据分析。而这时,自动化工具 Puppeteer 就派上了用场。
jackcode
2024/11/11
2870
捕获抖音截图:如何用Puppeteer保存页面状态
动态网页爬取:Python如何获取JS加载的数据?
在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段。许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取方法难以奏效。然而,对于数据分析师、研究人员以及开发者来说,获取这些动态加载的数据仍然是一个重要的需求。本文将详细介绍如何使用Python来爬取JavaScript加载的数据,包括技术原理、实现方法以及代码示例。
小白学大数据
2025/05/22
3500
推荐阅读
相关推荐
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验