使用高效代理抓取58同城巴州二手房信息并保存至excel

2023-11-07

声明:此程序旨在技术学习交流,促进网络安全,不作任何商业用途,违者责任自负

此程序就是使用代理IP来反爬的一个小案例,使用的高效代理,通过API每次请求提取一个代理IP,一个代理IP(必须是高匿代理,隐藏真实IP)相当于一台主机,只要主机足够多,不停地更换主机也就实现了反爬。经过反复测试,程序已经可以正常爬取50页的内容,因为使用了代理,并且异常处理的代码也做了多次的修改完善,达到了反爬的目的,只是需要多消耗几个代理IP,3元1000个代理IP,50页至少需要50个,理想状态下1毛5分钱爬50页数据,一般就按2毛钱算。大家除了可以像我这样统计抓取成功率,还可以统计每次爬完50页消耗了多少个代理IP,以3元1000个代理来算本次花了多少MONEY都可以算一下只要程序中途不停止就没问题。

1.程序运行效果演示:

在这里插入图片描述
在这里插入图片描述

2.保存至Excel里的数据示例,50页基本是3000多条,每次都会有一些不一样的

在这里插入图片描述

3.代码示例

import requests
from lxml import html
import random
import xlwt
import time
from requests.adapters import HTTPAdapter
from retry import retry

global list_title


def get_ip():
    try:
        url1 = '填写IP代理的API接口网址'
        response = requests.get(url1)
        if response.status_code == 200:
            while response.text[0] == '{':
                time.sleep(2)
                response = requests.get(url1)
            return [x for x in response.text.split('\r')]
            # print('获取ip失败')

            # 此处返回的内容是多行的字符串,使用列表表达式使其拆分成组合成列表

        else:
            print('请求失败')
    except Exception as e:
        print(e)


i = 0


@retry(tries=3, delay=1, backoff=1, jitter=0, max_delay=1)
def my_request(url):
    requests.adapters.DEFAULT_RETRIES = 15
    s = requests.session()
    s.keep_alive = False  # 关闭之前的连接,避免连接过多
    global r
    try:
        ips = get_ip()
        proxy = {'https': ips[0]}
        print(proxy)
        r = requests.get(url, headers=head, proxies=proxy, verify=False, timeout=5)
        r.encoding = 'utf-8'

    except BaseException:  # 捕获异常的时候,这里粗略的写了BaseException,根据需要可写的更具体。
        print(url, "请求失败,开始重试")
        ips = get_ip()
        proxy = {'https': ips[0]}
        print(proxy)
        r = requests.get(url, headers=head, proxies=proxy, verify=False, timeout=5)
        r.encoding = 'utf-8'
    return r


global r
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "accept": "application/json, text/plain, */*", "accept-encoding": "gzip, deflate, br",
    "accept-language": "zh-CN,zh;q=0.9"}

work_book = xlwt.Workbook(encoding="utf-8")
sheet = work_book.add_sheet("巴州二手房信息")
sheet.write(0, 3, "小区名称")
sheet.write(0, 4, "区域1")
sheet.write(0, 5, "区域2")
sheet.write(0, 6, "地址")

sheet.write(0, 7, "总价(万元)")
sheet.write(0, 8, "单价(元/㎡)")
sheet.write(0, 2, "房子大小(㎡)")
sheet.write(0, 1, "房型")
sheet.write(0, 0, "标题")
row_num = 1
z = 0
v = 0

for i in range(0, 50):
    v += 1
    i += 1
    try:
        url = "https://bygl.58.com/ershoufang/p" + str(i) + "/"
        print(url)
        my_request(url)

    except Exception as e:
        print(e)
        print("第" + str(i) + "页出错!")
        print("--------------------------")
        continue

    else:

        preview_html = html.fromstring(r.text)

        list_title = preview_html.xpath("//div[@class='property-content-title']/h3/text()|//p["
                                        "@class='property-content-info-comm-name']/text()|//p[ "
                                        "@class='property-content-info-comm-address']//span/text()|//span[ "
                                        "@class='property-price-total-num']/text()|//p["
                                        "@class='property-price-average']/text()|//p["
                                        "@class='property-content-info-text'][1]/text()|//p["
                                        "@class='property-content-info-text property-content-info-attribute']//span//text()")
        list_title = [str(x) for x in list_title]
        if not list_title:
            print("列表为空,重新获取代理IP:")
            my_request(url)

            list_title = preview_html.xpath("//div[@class='property-content-title']/h3/text()|//p["
                                            "@class='property-content-info-comm-name']/text()|//p[ "
                                            "@class='property-content-info-comm-address']//span/text()|//span[ "
                                            "@class='property-price-total-num']/text()|//p["
                                            "@class='property-price-average']/text()|//p["
                                            "@class='property-content-info-text'][1]/text()|//p["
                                            "@class='property-content-info-text property-content-info-attribute']//span//text()")
            list_title = [str(x) for x in list_title]

            time.sleep(random.random() * 2)

        print("成功爬取第" + str(i) + "页数据")
        z += 1
        print("抓取成功率:{:.2%}\n--------------------------".format(z / v))

    for j in range(len(list_title)):

        if j % 14 == 0:
            title = list_title[j + 8]
            area1 = list_title[j + 9]
            biaoti = list_title[j]
            area2 = list_title[j + 10]
            area3 = list_title[j + 11]
            totalnum = list_title[j + 12]
            avg = list_title[j + 13]
            size = list_title[j + 7].strip().strip('\n')
            house_type = list_title[j + 1] + list_title[j + 2] + list_title[j + 3] + list_title[j + 4] + list_title[
                j + 5] + list_title[j + 6]
            # print(type(list_title[j + 6]))

            sheet.write(row_num, 3, title)
            sheet.write(row_num, 4, area1)
            sheet.write(row_num, 5, area2)
            sheet.write(row_num, 6, area3)
            sheet.write(row_num, 7, totalnum)
            sheet.write(row_num, 8, avg)
            sheet.write(row_num, 2, size)
            sheet.write(row_num, 1, house_type)
            sheet.write(row_num, 0, biaoti)
            row_num += 1
    time.sleep(3)
file_name = r"F:\巴州二手房爬取.xls"
work_book.save(file_name)

说明:一般想要获取有价值的信息的网站都有反爬机制,这个程序只是一个单线程的简单小爬虫,58同城的反爬非常敏感,虽然使用了代理,但是消耗的IP代理也是非常大的,所以有兴趣的朋友可以摸索更好的反爬方法或是多线程运行增加效率之类的。

另外此程序可以一直运行到最末页(50页)结束,最主要的是异常处理,一是请求网址地址的时候失败,二是抓取数据的时候抓到空白内容都需要重新获取代理IP地址,再请求。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用高效代理抓取58同城巴州二手房信息并保存至excel 的相关文章

  • 13.网络爬虫—多进程详讲(实战演示)

    网络爬虫 多进程详讲 一 进程的概念 二 创建多进程 三 进程池 四 线程池 五 多进程和多线程的区别 六 实战演示 北京新发地线程池实战 前言 个人简介 以山河作礼 Python领域新星创作者 CSDN实力新星认证 第一篇文章 1 认识网
  • 19.网络爬虫—照片管道

    网络爬虫 照片管道 Scrapy基础 Scrapy运行流程原理 Scrapy的工作流程 scrapy照片管道 实战演示 设置图片路径 配置爬虫 解析数据 运行爬虫 查看文件 后记 前言 个人简介 以山河作礼 Python领域新星创作者 CS
  • [python爬虫] Selenium定向爬取虎扑篮球海量精美图片

    前言 作为一名从小就看篮球的球迷 会经常逛虎扑篮球及湿乎乎等论坛 在论坛里面会存在很多精美图片 包括NBA球队 CBA明星 花边新闻 球鞋美女等等 如果一张张右键另存为的话真是手都点疼了 作为程序员还是写个程序来进行吧 所以我通过Pytho
  • 20.网络爬虫—Scrapy-Redis分布式爬虫

    网络爬虫 Scrapy redis详讲 Redis的安装与使用 分布式概念和作用 分布式爬虫 分布式爬虫特点 redis的使用 Redis 操作 启动 Redis Desktop Manager下载 特点和架构 安装和使用 Scrapy r
  • 10.网络爬虫—MongoDB详讲与实战

    网络爬虫 MongoDB详讲与实战 MongoDB MongoDB安装 创建数据目录 1 数据库操作 2 集合操作 3 文档操作 4 索引操作 5 聚合操作 6 备份与恢复 MongoDB增删改查 mongodb集合的增删改查 数据插入到表
  • python网络爬虫之Max retries exceeded with url错误

    ConnectionError HTTPSConnectionPool host cq feibaos com port 443 Max retries exceeded with url news lists notice html re
  • [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息 两种方法从本质上都是一样的 都是通过分析网页的DOM树结构进行元素定位 再定向爬取具体的电影信息 通过代码的对比 你可以进一步加深Python爬虫的印
  • python网络爬虫--基本概念(1)

    一 爬虫简介 1 1 爬虫的定义 网络爬虫 又被称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动批量化地抓取万维网信息的程序或者脚本 自动批量化的抓取既有数据 模拟客户端发送请求 接受数据 1
  • 5.网络爬虫——Xpath解析

    网络爬虫 Xpath解析 Xpath简介 Xpath解析 节点选择 路径表达式 谓语 未知节点 Xpath实战演示 豆果美食实战 获取数据 源代码 前言 此专栏文章是专门针对Python零基础爬虫 欢迎免费订阅 第一篇文章获得全站热搜第一
  • [python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL

    这系列文章主要讲述 如何通过Python爬取招聘信息 且爬取的日期为当前天的 同时将爬取的内容保存到数据库中 然后制作定时系统每天执行爬取 最后是Python调用相关库发送短信到手机 最近研究了数据库的定时计划备份 联系爬虫简单做了这个实验
  • 12.网络爬虫—线程队列详讲(实战演示)

    网络爬虫 线程队列详讲与实战 线程 队列 Queue模块介绍 线程和队列的关系 生产者消费者模式 实战演示 王者荣耀照片下载 使用生产者消费者模式 前言 个人简介 以山河作礼 Python领域新星创作者 CSDN实力新星认证 第一篇文章 1
  • Python网络爬虫:爬取CSDN热搜数据 并保存到本地文件中

    hello 大家好 我是wangzirui32 今天我们来学习如何爬取CSDN热搜数据 并保存到Excel表格中 开始学习吧 学习目录 1 数据包抓取 2 编写代码 1 数据包抓取 打开CSDN首页 再打开检查 或为审查元素 各大浏览器不同
  • [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地

    前面 Python爬虫之Selenium Phantomjs CasperJS 介绍了很多Selenium基于自动测试的Python爬虫程序 主要利用它的xpath语句 通过分析网页DOM树结构进行爬取内容 同时可以结合Phantomjs模
  • [python知识] 爬虫知识之BeautifulSoup库安装及简单介绍

    一 前言 在前面的几篇文章中我介绍了如何通过Python分析源代码来爬取博客 维基百科InfoBox和图片 其文章链接如下 python学习 简单爬取维基百科程序语言消息盒 Python学习 简单网络爬虫抓取博客文章及思想介绍 python
  • [Python从零到壹] 七.网络爬虫之Requests爬取作者个人博客网站及CSV存储

    欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编程经验分享给大家 希望对您有所帮助
  • 【Python学习笔记2】Python网络爬虫的异常处理

    本文信息主要来源于韦玮老师的 精通python网络爬虫 仅作为个人学习笔记 通过python库函数urllib request去爬取网页时 遇到的异常主要时URL类和网页类的错误 python已提供URLError类和HTTPError类来
  • 13.网络爬虫—多进程详讲(实战演示)

    网络爬虫 多进程详讲 一 进程的概念 二 创建多进程 三 进程池 四 线程池 五 多进程和多线程的区别 六 实战演示 北京新发地线程池实战 前言 个人简介 以山河作礼 Python领域新星创作者 CSDN实力新星认证 第一篇文章 1 认识网
  • python网络爬虫--selenium(6)--练习

    一 打开网页获取页面源码 from selenium webdriver chrome import webdriver 初始化 需要加载浏览器驱动 driver webdriver WebDriver executable path ch
  • python网络爬虫--练习

    一 爬取王者荣耀英雄信息 单页 import json import pymysql import requests from lxml import etree def get heros url response requests ge
  • 4.网络爬虫—Post请求(实战演示)

    网络爬虫 Post请求实战演示 POST请求 GET请求 POST请求和GET请求的区别 获取二进制数据 爬 百度官网 https www baidu com logo实战 发送post请求 百度翻译实战 使用session发送请求 模拟登

随机推荐

  • 00后太卷了,公司新来的一位卷王,表示我们这帮老油条真干不过.....

    都说00后躺平了 但是有一说一 该卷的还是卷 这不 前段时间我们公司来了个00后 工作没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好
  • Linux 环境基础开发工具的使用

    目录 一 软件包管理器 yum 1 什么是软件包 2 查看软件包 3 如何安装软件 4 如何卸载软件 二 Linux开发工具 1 Linux编辑器 vim使用 1 1 vim的基本概念 1 2 vim的基本操作 1 3 vim正常模式命令集
  • springboot项目部署宝塔提示成功,实际没有启动

    被这个问题搞得头大了 默认项目用户为www 把项目用户改成root即可启动成功 启动成功后 再刷新还是显示成功运行
  • web测试的基本测试点

    一 什么是Web测试 如果要了解web测试 首先我们的清楚web项目是什么 一般指本b s架构项目也就是通过浏览器进行访问的 在日常生活工作中 基于web系统的应用非常多 打开电脑 抢火车票我们会登陆12306网站 添置衣物我们会登陆天猫
  • Codeforces 996 A Hit the Lottery

    A Hit the Lottery time limit per test 1 second memory limit per test 256 megabytes input standard input output standard
  • 副业搞钱的几个野路子:两个年入10万的零成本赚钱项目

    不想担太多风险 想低成本歪主意 最佳的选择不外乎就是做服务和卖交互式产品 搞交互式项目 最大的成本是时间成本 很多人都不缺时间 缺的是歪主意思维和变通能力 独豆豆不如众豆豆 这几天辨认出了三个歪主意的野路子 写个文章给大家互动互动 这三个主
  • Fisco Bcos区块链二(搭建使用控制台,体验Holleworld合约调用)

    文章目录 区块链开荒 技术文档 https fisco bcos documentation readthedocs io zh CN latest index html 2 配置及使用控制台 1 准备依赖 2 启动并使用控制台 3 部署及
  • 100天精通Python(可视化篇)——第97天:Pyecharts绘制多种炫酷热力图参数说明+代码实战

    文章目录 专栏导读 1 热力图介绍 2 基础热力图 3 添加色块数值 4 添加热力标尺 5 修改色块颜色 6 不同区间颜色 7 炫酷模块1 8 炫酷模块2 书籍推荐 专栏导读 本文已收录于 100天精通Python从入门到就业 本专栏专门针
  • 【构建ML驱动的应用程序】第 8 章 :部署模型时的注意事项

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 最大堆和最小堆

    堆和栈的区别 一 堆栈空间分配区别 1 栈 操作系统 由操作系统自动分配释放 存放函数的参数值 局部变量的值等 其操作方式类似于数据结构中的栈 2 堆 操作系统 一般由程序员分配释放 若程序员不释放 程序结束时可能由OS回收 分配方式倒是类
  • 【从零开始】力扣刷题(2)

    前言 我根据这里的表单开始刷力扣 数组的改变移动 453 最小操作次数使元素相等 写了一个但超过时间限制 碰到 1 100000000 就超出时间限制了 就不错误示范了 看了一个评论 拍案叫绝 665 非递减数列 想了一天 看了很多解答 好
  • 【数据结构2】算法的基本概念

    算法的基本概念 程序 数据结构 算法 数据结构 如何把现实世界的问题信息化 将信息存进计算机 同时还要实现对数据结构的基本操作 算法 如何处理这些信息 以解决实际问题 算法的特性 有穷性 一个算法必须总在执行有穷步之后结束 且每一步都可在有
  • Windows 快速配置ip地址

    说明 生活中 很多时候我们要背着电脑往返于某些固定的地方 家里 公司 实验室 寝室等等 每次开电脑后第一件事情就是用图形界面点点点点再点改IP地址 这样非常的麻烦 如何快速配置为自己量身定做的IP地址呢 当然是用脚本 bat 脚本 将下面脚
  • Stata数据处理

    作者 Economicoder 公众号 数据学徒 1 快捷键 Fn F2 描述数据 describe Fn PgUp 搜索先前命令 Ctrl 8 打开 data editor browse Ctrl 9 新建do文档 Ctrl D 执行在d
  • 图片转换js (img对象,file对象,base64,canvas对象),以及图片压缩方式

    首先想一想我们有哪些需求 大多时候我们需要将一个File对象压缩之后再变为File对象传入到远程图片服务器 有时候我们也需要将一个base64字符串压缩之后再变为base64字符串传入到远程数据库 有时候后它还有可能是一块canvas画布
  • 【blog】使用github-pages搭建个人博客

    我的博客 以此博客记录学习过程及相关学习笔记 一 选择模板 1 在Jekyll Themes 或者jekyll sites 选择一个你喜欢的模板直接下载 2 在github新建一个项目 选择一个主题 外链图片转存失败 源站可能有防盗链机制
  • 数据库的模糊查询

    命中率越高 策略越好 数据库的模糊查询 work918 在SQL中 模糊查询可以使用LIKE关键字来实现 LIKE关键字后面可以跟一个模式 其中 表示任意数量的字符 表示一个字符 例如 如果你想在一个名为students的表中查找所有名字以
  • python计算正方形、立方体、圆、球的面积和体积

    usr bin env python encoding UTF 8 import math 正方形的面积 def square mianji x return x x 立方体的表面积 def cube x return xx6 立方体的体积
  • linux系统下部署02-InfluxDB的安装和设置密码

    InfluxDB是一个当下比较流行的时序数据库 InfluxDB使用 Go 语言编写 无需外部依赖 安装配置非常方便 适合构建大型分布式系统的监控系统 一 InfluxDB 简介 InfluxDB 是用Go语言编写的一个开源分布式时序 事件
  • 使用高效代理抓取58同城巴州二手房信息并保存至excel

    声明 此程序旨在技术学习交流 促进网络安全 不作任何商业用途 违者责任自负 此程序就是使用代理IP来反爬的一个小案例 使用的高效代理 通过API每次请求提取一个代理IP 一个代理IP 必须是高匿代理 隐藏真实IP 相当于一台主机 只要主机足