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

 引言

最近数据分析的热度在编程社区不断攀升,有很多小伙伴都开始学习或从事数据采集相关的工作。然而,网站数据已经成为网站的核心资产,许多网站都会设置一系列很复杂的防范措施,阻止外部人员随意采集其数据。为了解决这个问题,使用代理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 etreeproxy = {'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 resdef 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 resultprint(parse_page(get_page(url)))

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

 

总结

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

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

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

促销来啦

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

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

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

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

智能助手,一路随行

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

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

 

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

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精品基于Python实现的微信小程序校园导航系统-微信小程序

[含文档PPT源码等] [包运行成功永久免费答疑辅导] 《django微信小程序校园导航系统》该项目采用技术Python的django框架、mysql数据库 &#xff0c;项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等 软件开发环境及开发工具&#xf…

动手学深度学习-线性神经网络-7softmax回归的简洁实现

目录 初始化模型参数 重新审视Softmax的实现 优化算法 训练 小结 在 线性回归的实现中&#xff0c; 我们发现通过深度学习框架的高级API能够使实现 线性回归变得更加容易。 同样&#xff0c;通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上一节…

09篇--图片的水印添加(掩膜的运用)

如何添加水印&#xff1f; 添加水印其实可以理解为将一张图片中的某个物体或者图案提取出来&#xff0c;然后叠加到另一张图片上。具体的操作思想是通过将原始图片转换成灰度图&#xff0c;并进行二值化处理&#xff0c;去除背景部分&#xff0c;得到一个类似掩膜的图像。然后…

封装数组去重的方法

前言 之前在工作中我一直在用lodash这个方法库&#xff0c;前段时间又接触了更现代化的方法库radash&#xff0c;这两个方法库可以说是各有优劣&#xff0c;lodash中有很实用的cloneDeep&#xff0c;radash中则有tryit、all等异步方法&#xff0c;它们都无法做到完全代替对方。…

前端成长之路:CSS复合选择器

复合选择器 在CSS中&#xff0c;可以根据选择器的类型将选择器分为基础选择器和复合选择器。 基础选择器就是前面提到过的类选择器、id选择器、标签选择器等&#xff1b;而复合选择器就是在基础选择器的基础之上&#xff0c;将基本选择器进行组合形成的。 复合选择器是由两个及…

在数字孪生开发领域threejs现在的最新版本已经更新到多少了?

在数字孪生开发领域three.js现在的最新版本已经更新到多少了&#xff1f; 在数字孪生开发领域&#xff0c;three.js作为一款强大的JavaScript 3D库&#xff0c;广泛应用于Web3D可视化、智慧城市、智慧园区、数字孪生等多个领域。随着技术的不断进步和需求的日益增长&#xff0…

HTML入门级学习笔记1【超详细】

目录 一、计算机基础知识 2.1 文件和文件夹管理 2.2 特殊按键和快捷键 2.3 打字速度 二、互联网的原理 3.1 上网就是请求数据 3.2 服务器 3.3 浏览器 3.4 HTTP 三、HTML初步认识 4.1 认识什么是纯文本文件txt 4.2 HTML是负责描述文档语义的语言 四、Sublime 五、HTML骨架和基本…

【网络】传输层协议UDP/TCP网络层IP数据链路层MACNAT详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.传输层协议 UDP 1.1 传输层 1.2 端口号 1.3 UDP 协议 1.3.1 UDP 协议端格式 1.3.2 UDP 的特点 1.3.3 面向数据报 1…

计算机网络技术基础:3.计算机网络的拓扑结构

网络拓扑结构是指用传输媒体互连各种设备的物理布局&#xff0c;即用什么方式把网络中的计算机等设备连接起来。将工作站、服务站等网络设备抽象为点&#xff0c;称为“节点”&#xff1b;将通信线路抽象为线&#xff0c;称为“链路”。由节点和链路构成的抽象结构就是网络拓扑…

SecureCRT/FX使用[无限试用SecureCRT][新版本SecureFX双击站点总是自动跳到SecureCRT]

无限试用SecureCRT 本文摘录于&#xff1a;https://blog.csdn.net/qq_52162404/article/details/139703993#:~:textSecureCRT只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 我这里修改BAT如下,同时删除CRT和FX的license: echo off re…

Nacos系列:Nacos 控制台手册

引言 Nacos是阿里巴巴中间件部门开源的一款用于服务发现和配置管理的产品&#xff0c;Nacos 控制台主要旨在于增强对于服务列表、健康状态管理、服务治理、分布式配置管理等方面的管控能力&#xff0c;以便进一步帮助用户降低管理微服务应用架构的成本。 一、访问 Nacos 控制台…

frida打印日志字体加颜色

平时写frida hook 脚本&#xff0c;有时打印出来的日志太多都是一个颜色不美观。 于是找AI 问了一下frida打印日志字体加颜色的方法 // ANSI 转义码 const RESET “\x1b[0m”; const RED “\x1b[31m”; const GREEN “\x1b[32m”; const YELLOW “\x1b[33m”; const BLUE …

Thunderfury, Blessed Blade of the Windseeker

Thunderfury, Blessed Blade of the Windseeker 雷霆之怒&#xff0c;逐风者的祝福之剑 她应该是wow里面造型最帅&#xff0c;最酷的模型超大武器&#xff0c;而且特效触发频率很高&#xff0c;群拉效果非常好。 雷霆之怒&#xff0c;逐风者的祝福之剑 - 物品 - NFU魔兽世界1…

ubuntu+ros新手笔记(三)

系统ubuntu22.04 ros2 humble 1. 设置ubuntu终端字体大小 点击Terminal右上角的三条横线—>Preferences—>Unnamed—>Text—>勾选Custom font—>点击右侧的字号&#xff08;我的显示的是12&#xff09;—>最下方Size处设置字号大小—>Select—>设置完…

Deveco报错Only files in a module can be previewed

创建工程后需要看看预览的效果&#xff0c;却出现了这个错误 到Index.ets文件下重新构建工程 详细可以查询 鸿蒙报错&#xff08;Only files in a module can be previewed&#xff09;

第六届地博会开幕,世界酒中国菜美食文化节同期启幕推动地标发展

第六届知交会暨地博会开幕&#xff0c;辽黔欧三地馆亮点纷呈&#xff0c;世界酒中国菜助力地理标志产品发展 第六届知交会暨地博会盛大开幕&#xff0c;多地展馆亮点频出&#xff0c;美食文化节同期启幕推动地标产业发展 12月9日&#xff0c;第六届粤港澳大湾区知识产权交易博…

计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Hadoop 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

C# 探险之旅:第二十七节 - 类型class(属性) —— 给你的类穿上“属性”的外衣

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上我们的C#奇幻之旅。今天&#xff0c;我们要聊聊一个超级有趣的话题——类的“属性”。想象一下&#xff0c;如果我们要给类穿上一件酷炫的外衣&#xff0c;那属性就是这件外衣上的各种口袋和装饰&#xff0c;让类变得既实用又拉…

【学习记录】Docker初探-容器创建与拉取(2)

参考资料 Window下玩转Docker Desktop哔哩哔哩bilibili Docker镜像推送至Docker Hub的完整教程-百度开发者中心 (baidu.com) 为什么需要Docker&#xff1f; Docker可以在不同服务器之间转移打包好的程序和环境&#xff0c;从而方便测试。打包好的程序和环境可以被称之为容器…

MongoDB学习路线图

‌MongoDB 在多种场景下都是理想的数据库解决方案。让我们讨论一些你应该考虑使用 MongoDB 的关键情形。 处理大量数据 当处理可能需要大量读写操作的大量数据时&#xff0c;MongoDB 是一个出色的选择&#xff0c;因为它具有高性能和水平扩展性。通过利用复制和分片&#xff…