最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python3爬虫实战:以爬取小猪短租租房信息为例

    正文概述    2020-08-28   414

    Python3爬虫实战:以爬取小猪短租租房信息为例

    本文以爬取小猪短租租房信息为例。首先进入主页后选择深圳地区的位置。地址如下:

    http://sz.xiaozhu.com/

    一、标题爬取

    按照惯例,我们先复制标题的xpath信息,多复制几个进行对比:

    Python3爬虫实战:以爬取小猪短租租房信息为例

    //*[@id="page_list"]/ul/li[1]/div[2]/div/a/span
    //*[@id="page_list"]/ul/li[2]/div[2]/div/a/span
    //*[@id="page_list"]/ul/li[3]/div[2]/div/a/span
    //*[@id="page_list"]/ul/li[4]/div[2]/div/a/span
    #.....               ......

    对比后发现,标题只是 li[] 序号发生改变,于是我们很快写出标题的通用 xpath 信息

    //*[@id="page_list"]/ul/li/div[2]/div/a/span

    这是固定套路啊。于是我们先把整页的标题爬取下来:

    #-*- coding:utf-8 -*-
    import requests
    from lxml import etree
    import time
    url3 = 'http://sz.xiaozhu.com/'
    data3 = requests.get(url3).text
    h = etree.HTML(data3)
    titles = h.xpath('//*[@id="page_list"]/ul/li/div[2]/div/a/span/text()')
    time.sleep(2)#注意,小猪在发爬虫方面做得比较好,防止被封IP就加个睡眠吧
    for title in titles:
        print (title)

    注意,注意,注意~~重要的事情要说三遍,我刚开始没有加睡眠,结果他把我IP给封了,封了,我滴妈,那我还怎么展示我的结果啊,特么都不让我访问了,呜呜,所以这里大家一定要注意,加个睡眠时间,并且这个睡眠时间稍微长一点,5s 以上应该就不会被封了吧,如果还被封,那那那~就太恶心了。

    哎,说多了都是泪啊,大家一定好奇我的IP后来怎么样了?

    没管,第二天解封了,哈哈哈~~~

    结果展示:

    毗邻海上世界 交通便利 无敌海景 赛车公寓
    1号主人房|1.8米床  前海园林式小区公寓
    【红山站】近深圳北站龙星河传奇宜家风一房一厅
    【平时订房租二送一】近木棉湾地铁站/整租两房
    CBD艺术空间大套房 深圳最中心位置
    复式书房+独立花园阳台|前海园林式小区
    步行至会展中心地铁上盖阳光一居室
    6特价 西乡地铁站/西乡天虹楼上汇一城 下左
    罗湖文锦口岸黄贝岭新秀地铁口摩登两房整租
    5号飘窗次卧|前海园林式小区公寓
    福田CBD会展中心旁两房
    高尔夫球场边的家-趣园私人酒店公寓
    深圳湾科技园高新园地铁口万象天地极简两房一厅
    4西乡地铁站/西乡天虹 楼上小区 汇一城
    LifeHome生活家 深圳第一最美高端民宿
    2西乡地铁站/西乡天虹 楼上小区 汇一城
    会展中心/福田口岸 地铁口两房 出差居家首选
    1独卫主卧 西乡地铁/西乡天虹楼上小区汇一城
    #栖息地#罗湖口岸/东门老街地铁口/北欧一居
    【超暖和暖气】Loft大房 近深圳北
    东门老街~地铁口~【清新风格】小鹿屋
    超低价 近罗湖口岸火车站 国贸东门温馨两居
    蛇口中心水湾地铁90平两房一低密度电梯洋房
    (特惠)宝安中心/地铁口/机场高层海景1居

    OK,我们再选中房屋的整体信息。

    Python3爬虫实战:以爬取小猪短租租房信息为例

    整体xpath和标题xpath信息对比如下:

    整体:  //*[@id="page_list"]/ul/li
    标题:  //*[@id="page_list"]/ul/li/div[2]/div/a/span

    发现了什么?对咯,就是标题在整体的div里面去找,于是可以修改代码如下:

    home = h.xpath('//*[@id="page_list"]/ul/li')
    for div in home:
        title = div.xpath('./div[2]/div/a/span/text()')[0]
        
        #先找出每个房屋的所有信息,再从中找出标题

    OK,完善一下代码,并运行看看:

    #-*- coding:utf-8 -*-
    import requests
    from lxml import etree
    import time
    url3 = 'http://sz.xiaozhu.com/'
    data3 = requests.get(url3).text
    h = etree.HTML(data3)
    home = h.xpath('//*[@id="page_list"]/ul/li')
    time.sleep(2)#注意,小猪在发爬虫方面做得比较好,防止被封IP就加个睡眠吧
    for div in home:
        title = div.xpath('./div[2]/div/a/span/text()')[0]
        print ("租房标题:",title)

    结果展示:

    呵呵,IP被封了展示不出来,大家自己运行看看效果

    二、其他信息爬取

    基本的框架搭好了,接下来我们就往框架里填充其他信息。

    对比其他元素的xpath

    整体://*[@id="page_list"]/ul/li
    标题://*[@id="page_list"]/ul/li[1]/div[2]/div/a/span
    价格://*[@id="page_list"]/ul/li[1]/div[2]/span[1]/i
    描述://*[@id="page_list"]/ul/li[1]/div[2]/div/em
    图片://*[@id="page_list"]/ul/li[1]/a/img

    于是我们可以写出如下代码:

    for div in home:
        title = div.xpath('./div[2]/div/a/span/text()')[0] #标题
        price = div.xpath('./div[2]/span[1]/i/text()')[0]#价格
        describle = div.xpath('./div[2]/div/em/text()')[0].strip()#描述
        photo = div.xpath('./a/img/@lazy_src/')[0] #图片

    现在我们来爬取一下看看结果:

    #-*- coding:utf-8 -*-
    import requests
    from lxml import etree
    import time
    url3 = 'http://sz.xiaozhu.com/'
    data3 = requests.get(url3).text
    h = etree.HTML(data3)
    home = h.xpath('//*[@id="page_list"]/ul/li')
    time.sleep(2)#注意,小猪在发爬虫方面做得比较好,防止被封IP就加个睡眠吧
    for div in home:
        title = div.xpath('./div[2]/div/a/span/text()')[0] #标题
        price = div.xpath('./div[2]/span[1]/i/text()')[0]#价格
        describle = div.xpath('./div[2]/div/em/text()')[0].strip()#描述
        photo = div.xpath('./a/img/@lazy_src/')[0]
        print ("{}-->{}-->{}\n{}".format(title,price,describle,photo))

    结果展示:

    呵呵,IP被封了展示不出来,大家自己运行看看效果

    三、爬取5页数据

    看一下翻页以后的url变化:

    第一页:http://sz.xiaozhu.com/search-duanzufang-p1-0/
    第二页:http://sz.xiaozhu.com/search-duanzufang-p2-0/
    第三页:http://sz.xiaozhu.com/search-duanzufang-p3-0/
    第四页:http://sz.xiaozhu.com/search-duanzufang-p4-0/

    可以发现url的变化非常规律,只是p后面的数字不一样而已,而且跟页码的序号一模一样,哈哈,这真是天助我也。

    于是乎,加个循环我们就可以爬取多个页面的数据了。

    for i in range(1,6):
    url3 = 'http://sz.xiaozhu.com/search-duanzufang-p{}-0/'.format(i)

    来看一下爬取5个页面的代码运行结果:

    #-*- coding:utf-8 -*-
    import requests
    from lxml import etree
    import time
    for i in range(1,6):
        url3 = 'http://sz.xiaozhu.com/search-duanzufang-p{}-0/'.format(i)
        data3 = requests.get(url3).text
        h = etree.HTML(data3)
        home = h.xpath('//*[@id="page_list"]/ul/li')
        time.sleep(2)#注意,小猪在发爬虫方面做得比较好,防止被封IP就加个睡眠吧
        for div in home:
            title = div.xpath('./div[2]/div/a/span/text()')[0] #标题
            price = div.xpath('./div[2]/span[1]/i/text()')[0]#价格
            describle = div.xpath('./div[2]/div/em/text()')[0].strip()#描述
            photo = div.xpath('./a/img/src/')[0]
            time.sleep(2)
            print ("{}-->{}-->{}\n{}".format(title,price,describle,photo))

    结果展示:

    龙华公园/深圳北站/清湖地铁旁温馨2居-->348-->整套出租/2室1厅/2张床/宜住4人
    ['../images/lazy_loadimage.png']
    小清新复式 南山中心/深圳湾口岸/南油批发城-->488-->整套出租/2室1厅/2张床/宜住4人
    ['../images/lazy_loadimage.png']

    OK,通过两个实例的练习,我相信大家已经差不多上手了,这些都是比较简单基础的东西,当然后面还会遇到比较复杂的,比如数据处理等,但是基本思路大致是相同的,大家一定要独立练习几次,多踩几次坑,不要怕遇到困难,不懂就多去练习和尝试,直到能独立写出代码为止。

    众多python培训视频,尽在python学习网,欢迎在线学习!

    本文转自:https://blog.csdn.net/MTbaby/article/details/79191832


    起源地下载网 » Python3爬虫实战:以爬取小猪短租租房信息为例

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元