利用代理IP爬取Zillow房产数据用于数据分析

news2024/12/15 18:19:32

 引言

最近数据分析的热度在编程社区不断攀升,有很多小伙伴都开始学习或从事数据采集相关的工作。然而,网站数据已经成为网站的核心资产,许多网站都会设置一系列很复杂的防范措施,阻止外部人员随意采集其数据。为了解决这个问题,使用代理IP来访问网站就是一种既简单又有效的解决方案。使用代理IP能够让访问网站的流量看起来是由多个用户发出,而不是来自同一用户,从而避免被网站识别为爬虫程序。今天就和大家分享如何使用代理IP爬取数据。


亮数据最佳商用代理IP网络服务商,极易配置,高级代理包括:机房代理、动态住宅、静态住宅ISP以及移动IP代理。icon-default.png?t=O83Ahttps://www.bright.cn/proxy-types/?utm_source=brand&utm_campaign=brnd-mkt_cn_csdn_yingjie6&promo=yingjie6

亮数据ISP代理服务

        目前市面上代理IP服务的厂家有很多,亮数据属于比较早开始做的一批。经过多年的技术积累,不论是IP质量、稳定性还有一些便捷工具上都有它独到之处。这次我们就选择它作为我们代理IP的服务平台。

 

        注册并登录账号之后,点击无限数据中心就可以开始购买服务了。下方的抓取浏览器、网络解锁器和搜索引擎爬虫SERP是亮数据为用户设计的低代码爬虫工具,大家可以按需取用。

 

        这里我们需要填写名称和IP数量,其他使用默认设置即可。这次由于我们采集的是境外网站,所以IP区域选择大陆以外提高访问成功率。

 

        配置好之后即可在控制台找到购买的业务,这是也会弹出一个帮助,为我们提供了预设的API接口和一段预置的代码。

 

        我们把它复制下来,方便后面编写爬虫。之后我们要到代理服务的设置中添加白名单,把我们本地的IP地址填进白名单中,就可以正常访问了。

 

最后我们使用生成的样例代码测试一下服务是否通畅。可以看到运行之后回显了代理IP的区域信息。

 

实战:爬取Zillow房屋租赁页面

        Zillow是一个美国的在线房地产信息平台,主要提供住宅买卖、租赁和投资信息。它包含了丰富的房数据和工具帮助用户了解市场、寻找合适的房源并做出明智的决策。首先我们先来观察一下目标网页。以纽约房价为例,我们搜索“new york”可以得到搜索结果。

 

        我们本次的目标就在右边这个区域。按F12观察页面结构,可以看到所有搜索结果都是result-list-container的div中的一个列表中,每个<li>代表一个信息卡片。

 

        展开<li>标签即可看到房源的地址和页面链接对应一个address标签和一个a标签。

 

        而价格和户型则分别位于一个property-card-price的span和另一个ul列表中。

 

        这里户型信息分散在ul的每个li中,要多次取出再拼接。顺便在网络中获得一些请求的头信息,等一下制作爬虫的时候会用到。

 

        分析完页面,我们就可以开始制作爬虫了。我们主要分两个阶段执行,首先下载网页,然后使用xpath提取出目标数据。我们这次的任务目标是房源的地址、价钱、页面链接和户型信息。

        首先我们配置一些全局参数。包括亮数据平台的API接口,前面我们拿到的请求头,目标URL。

proxy = {'http': 'http://brd-customer-hl_a0a48734-zone-zillow:1ps57ihiyeg1@brd.superproxy.io:22225',
         'https': 'http://brd-customer-hl_a0a48734-zone-zillow:1ps57ihiyeg1@brd.superproxy.io:22225'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0'}
url = 'http://www.zillow.com/new-york-ny/'

        之后我们通过get_page()函数发送请求并获取页面内容。首先构建一个opener并将代理信息包含进去。之后通过这个opener和前面定义的请求头发送请求,将响应结果转换为文本并返回。

def get_page(target_url):
    opener = urllib.request.build_opener(urllib.request.ProxyHandler(proxy))
    req = urllib.request.Request(target_url, headers=headers)
    res = opener.open(req).read()
    return res

之后通过parse_page()函数解析HTML并提取数据。首先将网页HTML字符串解析为一个lxml的Element对象。然后使用XPath查找所有<li>标签,这些标签即为每个房产的信息卡片。接下来在每个<li>中分别提取:每个房产的链接,路径为/article//a[@class="property-card-link"]/@href;房产地址,路径为/article//a[@class="property-card-link"]/address/text();房产价格,路径为/article//span[@data-test="property-card-price"]/text();房产的详细信息,包括房间数、面积等,路径为/article//div[@class="property-card-data"]/div[2]/ul/li。最后将提取的数据被放入result列表中,并返回。

def parse_page(html):
    root = etree.HTML(html)
    lis = root.xpath('//div[@class="search-page-list-header"]/ul/li')
    result = []
    for li in lis:
        link = li.xpath('/article//a[@class="property-card-link"]/@href')[0]
        address = li.xpath('/article//a[@class="property-card-link"]/address/text()')[0]
        price = li.xpath('/article//span[@data-test="property-card-price"]/text()')[0]
        details = li.xpath('/article//div[@class="property-card-data"]/div[2]/ul/li')
        detail = ""
        for d in details:
            detail += d.xpath('/b/text()')[0] + ';'
        result.append({"link": link, "address": address, "price": price, "detail": detail})
    return result

最后调用这两个函数获取结果。完整代码如下:

#!/usr/bin/env python
import urllib.request
from lxml import etree
 
proxy = {'http': 'http://brd-customer-hl_a0a48734-zone-zillow:1ps57ihiyeg1@brd.superproxy.io:22225',
         'https': 'http://brd-customer-hl_a0a48734-zone-zillow:1ps57ihiyeg1@brd.superproxy.io:22225'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0'}
url = 'http://www.zillow.com/new-york-ny/'
 
 
def get_page(target_url):
    opener = urllib.request.build_opener(urllib.request.ProxyHandler(proxy))
    req = urllib.request.Request(target_url, headers=headers)
    res = opener.open(req).read()
    print(res)
    return res
 
 
def parse_page(html):
    root = etree.HTML(html)
    lis = root.xpath('//div[@class="search-page-list-header"]/ul/li')
    result = []
    for li in lis:
        link = li.xpath('/article//a[@class="property-card-link"]/@href')[0]
        address = li.xpath('/article//a[@class="property-card-link"]/address/text()')[0]
        price = li.xpath('/article//span[@data-test="property-card-price"]/text()')[0]
        details = li.xpath('/article//div[@class="property-card-data"]/div[2]/ul/li')
        detail = ""
        for d in details:
            detail += d.xpath('/b/text()')[0] + ';'
        result.append({"link": link, "address": address, "price": price, "detail": detail})
    return result
 
 
print(parse_page(get_page(url)))

运行之后可以看到成功抓取到了数据。

 

总结

          通过上面的实战,我们可以看到代理服务可以大大提高爬虫的匿名性和效率。亮数据家的代理可以满足这两点需求。

        对开发者而言,亮数据代理以其简单易用的特性,大幅降低了技术门槛。 开发者可以快速上手,无需深入了解代理服务的底层技术细节,即可实现高效的数据抓取。这不仅加快了开发进程,也使得开发者能够将更多精力投入到数据分析和业务逻辑的构建上。

        对于采购者,亮数据代理提供的价格实惠和套餐灵活,满足了不同规模和需求的采购预算。 用户可以根据自己的实际需求选择合适的套餐,无论是初创企业还是大型机构,都能找到符合自身预算的解决方案。

促销来啦

亮数据重磅推出“免费试用优惠”及“首次充值优惠”

1)即日起,注册新用户,可以获得2+5共7美金免费试用产品的机会。

2)新客户首次充值优惠,充多少送多少,最高500美金。

3)数据中心代理和静态代理,最近做了大幅的价格和收费模式的调整,颇具竞争力,有兴趣的可以上公司主页了解详情。以上充值赠送活动,针对数据中心和静态代理同样有效!

智能助手,一路随行

        许多新手用户,刚开始接触亮数据的产品,对于代理及相关技术不熟悉,一时不知如何操作。我们的软件研发团队在产品里内嵌了ChatGPT,您可以直接以中文提出问题,获得相关的帮助。

        您可以在初始登录界面的上方,找到这个可以输入文字的小框,开始用AI查询并获得帮助。

 

        输入问题后,稍等片刻,就会弹出相应的帮助内容回答。这里我们以“如何选择代理服务”举例,可以看到系统处理后,自动弹出中英文双语的内容,并提供了相关的链接,供您进一步参考。

 

        亮数据为此次内容提供额外优惠:现在体验,可以享受以上所有的价格优惠的同时,再送15美金特别试用金!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费送源码:Java+B/S+MySQL 多元化智能选课系统的设计与实现 计算机毕业设计原创定制

摘 要 多元化智能选课系统使用Java语言的Springboot框架&#xff0c;采用MVVM模式进行开发&#xff0c;数据方面主要采用的是微软的Mysql关系型数据库来作为数据存储媒介&#xff0c;配合前台技术完成系统的开发。 论文主要论述了如何使用JAVA语言开发一个多元化智能选课系统&…

(九)机器学习 - 多项式回归

多项式回归&#xff08;Polynomial Regression&#xff09;是一种回归分析方法&#xff0c;它将自变量 xx 和因变量 yy 之间的关系建模为 nn 次多项式。多项式回归的目的是找到一个 nn 次多项式函数&#xff0c;使得这个函数能够最好地拟合给定的数据点。 多项式回归的数学表达…

XX服务器上的npm不知道咋突然坏了

收到同事的V&#xff0c;说是&#xff1a;182上的npm不知道咋突然坏了&#xff0c;查到这里了&#xff0c;不敢动了。 咱一定要抓重点&#xff1a;突然坏了。这里的突然肯定不是瞬间&#xff08;大概率是上次可用&#xff0c;这次不可用&#xff0c;中间间隔了多长时间&#x…

Vizcom:AI驱动的草图到3D设计革命

Vizcom是一家领先的AI技术公司,专注于为工业设计师提供工具,将手绘草图快速转化为可制造的3D模型,从而加速产品迭代和创新。 公司背景与愿景 成立于2021年的Vizcom由前Nvidia工业设计师Jordan Taylor创立。Taylor凭借其深厚的创意设计背景和技术敏锐度,看到了生成对抗网络…

html自带的input年月日(date) /时间(datetime-local)/星期(week)/月份(month)/时间(time)控件

年月日期控件 type"date" <input type"date" id"StartDate" valueDateTime.Now.ToString("yyyy-MM-dd") /> //设置值 $("#StartDate").val("2024-12-12"); //获取值 var StartDate$("#StartDate&quo…

【51单片机】独立按键快速上手

51单片机独立按键是单片机控制系统中常用的一种输入方式&#xff0c;它相当于一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开。 开关功能‌&#xff1a;独立按键内部通常包含一个有弹性的金属片&#xff0c;当按键被按下时&#xff0c;金属片与触点接触&a…

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​ 什么是微服务&#xff1f; ​ 假如我们需要搭建一个网上购物系统&#xff0c;那么我们需要哪些功能呢&#xff1f;商品中心、订单中心和客户中心等。 ​ 当业务功能较少时&#xff0c;我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…

手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)

手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间&#xff0c;我们在技术范围之外陷入了一个自证或者说下定义的怪圈&#xff0c;即要怎么样去介绍或者描述&#xff1a;我们是一个什么样的产品。它在当前这个世界上&#xff0c;处于…

使用navicat新旧版本,连接PostgreSQL高版本报错问题图文解决办法

使用navicat新旧版本&#xff0c;连接PostgreSQL高版本报错问题图文解决办法 一、问题现象&#xff1a;二、出现原因三、解决方法&#xff1a;1、升级Navicat版本&#xff1a;2、使用低版本的postgreSQL&#xff1a;3、修改Navicat的dll二进制文件&#xff1a;navicat版本15nav…

12.1【JAVA EXP4】next项目

next项目构建问题 详解一下这个页面 什么是Node选项&#xff1f; Node选项是指在运行Node.js应用程序时可以传递给Node.js进程的一系列命令行参数。这些选项可以让开发者控制Node.js的行为&#xff0c;例如设置内存限制、启用或禁用某些功能、指定调试端口等 --inspect 和 --i…

【操作系统】实验九:设备驱动程序

实验9 设备驱动程序 在钻研Linux内核的人当中&#xff0c;大多数人都是在写设备驱动程序。尽管由于设备的特殊性&#xff0c;使得每个驱动程序都不一样。但是编写设备驱动程序的许多原则和基本技巧都是一样的&#xff0c;甚至Windows下的设备驱动程序从原理上讲也与之相通。在…

腾讯云COS跨域访问CORS配置

腾讯云COS跨域访问CORS配置方法如下&#xff0c;参考以下截图&#xff1a; 参考文章&#xff1a; 跨域及CORS-Nginx配置CORS

从EXCEL表格到WEB TABLE的实践

前言 EXCEL管理数据 Bootstrap Bootstrap 是一个流行的开源前端框架&#xff0c;它由 Twitter 的员工开发&#xff0c;用于快速开发响应式和移动设备优先的网页和应用程序。 jQuery jQuery 是一个快速、小巧且功能丰富的 JavaScript 库。它简化了 HTML 文档的遍历、事件处理…

python中向量指的是什么意思

一、向量是什么 在数学中&#xff0c;向量&#xff08;也称为欧几里得向量、几何向量、矢量&#xff09;&#xff0c;指具有大小&#xff08;magnitude&#xff09;和方向的量。它可以形象化地表示为带箭头的线段。箭头所指&#xff1a;代表向量的方向&#xff1b;线段长度&am…

高数 导数

文章目录 一&#xff0c;导数的知识点 二&#xff0c;单侧导数 三&#xff0c;可导和连续的关系 四&#xff0c;复合函数求导 五&#xff0c;参数方程求导 六&#xff0c;高阶导数求导 七&#xff0c;隐函数求导 八&#xff0c;微分基础 一&#xff0c;导数常用的知识点 …

基于Spring Boot的同城宠物照看系统的设计与实现

一、摘要 在快节奏的现代生活中&#xff0c;宠物已成为许多家庭不可或缺的一部分。然而&#xff0c;宠物照看服务的需求也随之增长。为了满足这一需求&#xff0c;我们设计并实现了一款同城宠物照看系统&#xff0c;该系统利用Java技术和MySQL数据库&#xff0c;为用户提供一个…

光伏逆变器负载的维护和保养方法有哪些?

光伏逆变器是光伏发电系统中的关键设备&#xff0c;它将太阳能电池板产生的直流电转换为交流电&#xff0c;为家庭和工业用电提供稳定的电力。为了保证光伏逆变器的正常运行和延长其使用寿命&#xff0c;我们需要对其进行定期的维护和保养。以下是一些建议&#xff1a; 清洁&a…

离开花少6后的周雨彤,还会不会好了

花儿与少年&#xff0c;这档著名的旅行综艺&#xff0c;从丝路季的9.3分&#xff0c;一路狂跌至第六季的3.9分&#xff0c;有人说是因为节目里太过抓马&#xff0c;导致这季分数太低&#xff0c;然而以最强抓马著称的花少2都有7.1分的高分。 花少6难看是真的&#xff0c;导演组…

警惕!手动调整服务器时间可能引发的系统灾难

警惕&#xff01;手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制&#xff08;JWT、TOTP&#xff09; 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…

群控系统服务端开发模式-应用开发-操作记录功能开发

一、开放路由 在根目录下route文件夹下修改app.php文件&#xff0c;代码如下&#xff1a; // 操作日志Route::get(token/get_list,permission.Token/getList);// 获取操作日志列表Route::post(token/get_all,permission.Token/getAll);// 获取操作日志所有数据Route::post(toke…