4. 使用Scrapy爬取鏈家房價


這里通過使用Scrapy對鏈家上的成都新房進行爬取

所需信息,房源名稱,售價,大小,位置

創建Spider

  
import scrapy


class homelink(scrapy.Spider):
    # 定義spider的名字,在調用spider進行crawling的時候會用到:
    #   scrapy crawl <spider.name>
    name = "homelink"
    # 如果沒有特別指定其他的url,spider會以start_urls中的鏈接為入口開始爬取
    start_urls = [
        "https://m.lianjia.com/cd/loupan/"
    ]

    # 獲取全部分頁鏈接
    # 可以采用遞歸更好,這里只是已獲取到所有頁數,整簡單點
    for page in range(1, 50):
        url = "https://m.lianjia.com/cd/loupan/pg{0}/".format(page)
        start_urls.append(url)


    # parse是scrapy.Spider處理http response的默認入口
    # parse會對start_urls里的所有鏈接挨個進行處理
    def parse(self, response):
        pass    

分析網站:

  鏈接新房售價頁面,每個房源對應一個item_list,找到房源名稱div,。

進一步分析每個房源信息,包括所對應的售價,位置信息,看似比較簡單。

接下來就是直接在spider回調函數中通過selector 把所要的信息拿出來,so easy。

簡單代碼完整后:

# -*- coding: utf-8 -*-

import scrapy

class homelink(scrapy.Spider):
    # 定義spider的名字,在調用spider進行crawling的時候會用到:
    #   scrapy crawl <spider.name>
    name = "homelink"
    # 如果沒有特別指定其他的url,spider會以start_urls中的鏈接為入口開始爬取
    start_urls = [
        # "http://cd.fang.lianjia.com/zhuanti/50/",
        # "http://cd.fang.lianjia.com/zhuanti/50/pg2/",
        # "http://cd.fang.lianjia.com/zhuanti/50/pg3/",
        # "http://cd.fang.lianjia.com/zhuanti/50/pg4/",
        "https://m.lianjia.com/cd/loupan/"
    ]

    # 獲取全部分頁鏈接
    # 可以采用遞歸更好,這里只是已獲取到所有頁數,整簡單點
    for page in range(1, 50):
        url = "https://m.lianjia.com/cd/loupan/pg{0}/".format(page)
        start_urls.append(url)
    # parse是scrapy.Spider處理http response的默認入口
    # parse會對start_urls里的所有鏈接挨個進行處理
    def parse(self, response):
        # 獲取當前頁面的房屋列表
        # print 'xxx', response
        # house_lis = response.xpath('//ul[@class="house-lst"]/li/div[@class="info-panel"]')
        # all_page = response.xpath('//*[@id="matchid"]/div/div/div')
        loupan = response.xpath("//div[@class='item_list']")

        with open("homelink.log", "ab+") as f:
            for house_li in loupan:
                title = house_li.xpath(
                        './div[@class="item_main item_flexbox"]/span[@class="name text_cut"]/text()').extract_first()
                where = house_li.xpath(
                        './div/span[@class="location text_cut"]/text()').extract_first()
                area = house_li.xpath(
                        './div/div[@class="location"]/text()').extract_first()
                price = house_li.xpath(
                        './div/div[@class="price_total"]/text()').extract_first()
                # print "Title: {0}\tPrice:{1}\tLink: {2} \tArea: {3}\r\n".format(title.encode('utf-8'), price, where,
                # print "Title:{0}\tPrice:{1}\tArea:{2}\tLink:{3}\r\n".format(title.encode('utf-8'), price, area.encode('utf-8'),
                #                                                      where.encode('utf-8'))
                f.writelines(
                        "Title:{0}\tPrice:{1}\tArea:{2}\tLink:{3}\t\n".format(title.encode('utf-8'), price,
                                                                                 area.encode('utf-8').strip().replace(
                                                                                     ' ', ''),
                                                                                 where.encode('utf-8').strip().replace(
                                                                                     ' ', '')))

生成結果如下(后面可以整個數據庫存起來,分析下各區域房價走勢。。呵呵呵):

  

 

 

PS:

  1. 不知道為啥從鏈家首頁進入所有新房頁面,會跳轉到移動版。。

  2. https網站直接爬取會被禁止,可設置ROBOTSTXT_OBEY = False。

  3. 寫文件的時候老是最后兩行空行,后來發現是原始數據里面很多空格,需要去掉。。坑!

 

補充:

  對於有些網站防爬蟲的,可以設置一些cookie, header模擬瀏覽器。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM