python利用百度API来爬区长沙市小区

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
当我们打开浏览器浏览网页的时候 我们通常会通过输入一个网址来进行访问,熟悉tomcat的工作原理的应该知道,浏览器实际上是向tomcat发送一段http请求,然后服务器找到请求的文件地址通过流来返回给浏览器,然后浏览器将返回的页面做一个解析。然后返过来看爬虫,其实就是模拟了浏览器发送请求的这一发送这一动作,但是页面可以自己解析,所以说,可以把浏览器看成一个巨大的爬虫外挂,这个可以去了解seleium这个爬虫工具了解seleium点击这里,简单又实用,但是效率是比较差的。其实熟悉后端开发的人都知道,数据是动态的,然而一般前端是通过调用一些接口来到页面上面绑定数据的,所以,为了提高爬取效率,可以找到这个这个请求的地址,然后通过模拟发送http请求来得到数据。

 知道了原理 ,首先就要了解百度API 下面就开始爬取长沙市所有小区

点我查看看具体的文档

在这里插入图片描述

在这里插入图片描述
百度对于一次性爬去做了限制,每次请求最多返回400条信息,但是一个区域里面这么大,400条数据是会遗漏很多,解决的办法是发送多次请求,如下图所示,将区域进行分片,一般是将其分成15*15,这样每一次请求就可以只针对小范围里面的区域取检索,这样获取的信息相对较为全面
在这里插入图片描述
分片代码附上

windowSize = {
   
    'xNum': 16.0,
    'yNum': 16.0
}
 for index in range(int(WindowSize['xNum'] * WindowSize['yNum'])):#总共循环16*16次
 		#获取x轴的偏移量 即这个1号小矩行的长
        offset_x = (bigRect[city]['right']['x'] - bigRect[city]['left']['x'])/windowSize['xNum']
       	#获取y轴的偏移量 1号小矩行的宽
        offset_y = (bigRect[city]['right']['y'] - bigRect[city]['left']['y'])/windowSize['yNum']
        #即每一次循环小矩行左下角的坐标 %就是每16这里的x轴就会返回到1  // 这个运算符就是当你循环次数少于16次的时候保持y上面的象限不变
        left_x = bigRect[city]['left']['x'] + offset_x * (index % windowSize['xNum'])
        left_y = bigRect[city]['left']['y'] + offset_y * (index // windowSize['yNum'])
        #x向量和y向量相加即可得到右上角的坐标
        right_x = (left_x + offset_x)
        right_y = (left_y + offset_y)
        smallRect =  str(left_y) + ',' + str(left_x) + ',' + str(right_y) + ',' + str(right_x)

上面的代码即就是完成分片了,剩余的就是要不断发请求了,可以采用重试机制 当一次请求出现超时的话,可以重试三次,这事重试机制的代码,采用递归来实现

def url_retry(url,num_retries=3):
    print("access!",url)
    try:
        request = requests.get(url,timeout=60)
        res = json.loads(request.text)
        #raise_for_status(),如果不是200会抛出HTTPError错误
    except requests.HTTPError as e:
        res=None
      
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值