理解Scrapy框架各个组成的作用:五大组成,下载器,调度器,引擎,爬虫,管道。
引擎:它是整个Scrapy框架的核心,用来处理整个系统的数据流,触发各种事件。用于控制调度器,下载器,爬虫,管道。
爬虫:用户可以通过正则,xpath等语法从特定的网页中提取需要的信息,即实体(Item).。也可以提取出链接,让Scrapy继续抓取下一个页面。
实体管道:用于接收爬取到的数据,以便于进一步处理,比如可以存入数据库,本地文件等进行持久化存储。
下载器:用于高速地下载网络上的资源。它是建立在twisted这个高效的异步模型上。
调度器:其就是一个url的优先队列,由它来决定下一个要抓取的网址是什么,同时去掉重复的网址。可以根据需求定制调度器。

Scrapy爬取链家网一个页面数据并且保存到本地文件:

需要爬取的链接:北京二手房房源_北京二手房出售|买卖|交易信息(北京链家) (lianjia.com)

一,明确需要爬取的数据

创建一个Item(实体)类,这里我们要爬取的数据有
      标题,位置,房屋信息,总价和均价,对此我们可以在items.py文件中定义一个
      Lianjia类,参考代码如下:
    class lianjia(scrapy.Item):
            title = scrapy.Field()
            positionPre = scrapy.Field()
           positionAft = scrapy.Field()
           houseInfo = scrapy.Field()
            totalPrice = scrapy.Field()
           unitPrice = scrapy.Field()


二,明确完数据后,我们就可以开始进行响应解析了,打开spiders文件,
      找到我们的爬虫文件(爬虫名.py),首先导入我们之前在items.py定义的ITEM(实体类):
      参考代码如:from ..items import Lianjia
      然后开始解析,由于xpath解析比较简单就不在赘述,拿到我们需要的数据后,实例化ITEM(实体类),
     将数据保存至这个ITEM(实体类中),然后yiled返回这个item对象。 参考代码如下:
        def parse(self, response):
                        li_list = response.xpath('.//ul[@class="sellListContent"]/li')
                        for li in li_list:
                        title = li.xpath('.//div[1]/div[1]/a/text()').extract_first()
                         positionPre = li.xpath('.//div[@class="positionInfo"]/a[1]/text()').extract_first()
                         positionAft = li.xpath('.//div[@class="positionInfo"]/a[2]/text()').extract_first()
                         houseInfo = li.xpath('.//div[@class="houseInfo"]/text()').extract_first()
                         totalPrice = li.xpath('.//div[@class="totalPrice totalPrice2"]/span/text()').extract_first()
                        unitPrice = li.xpath('.//div[@class="unitPrice"]/span/text()').extract_first()
                         item = Lianjia()
                       item['title'] = title
                         item['positionPre'] = positionPre
                         item['positionAft'] = positionAft
                        item['houseInfo'] = houseInfo
                        item['totalPrice'] = totalPrice
                         item['unitPrice'] = unitPrice
                         yield item


三,爬取完数据后,再进行数据的持久化存储,这里我们只保存到本地txt文件
      在pipelines.py文件里定义一个管道类,对yield返回的item我们进行保存到txt文件的操作,参考代码如下:
    class FirstspiderPipeline:
            fp = None
            def open_spider(self, spider):
                    print("爬虫开始")
                    self.fp = open('./链家二手房数据.txt', 'w', encoding='utf-8')
            def process_item(self, item, spider):
                   self.fp.write(
                        f'标题:{item["title"]}\n
            位置:{item["positionPre"]}
            {item["positionAft"]}\n
            房屋信息:{item["houseInfo"]}\n
            总价:{item["totalPrice"]}万\n
            均价:{item["unitPrice"]}\n\n')
                    return item
            def close_spider(self, spider):
                    print("爬虫结束")
                    self.fp.close()


四,将这些都执行后,再设置setting.py文件,
      设置USER_AGENT:USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
      设置robot协议将TRUE改成False:ROBOTSTXT_OBEY = False
      设置管道:
    ITEM_PIPELINES = {
      'firstSpider.pipelines.FirstspiderPipeline': 300,
    }

最后在终端中输入:scrapy crawl lianjia运行即可。

可以看到生成了个文件

在这个例子,首先由爬虫将start_urls起始网址(需要爬取的域名)提交给引擎,让引擎将这个网址交给调度器,
调度器将其入队后出队优先爬取的网址(这里我们没做翻页只有一个域名)交给引擎,
引擎将其交给下载器高速地下载网络资源得到一个响应再将这个响应交给引擎,引擎将这个响应提交给爬虫
由响应处理函数对这个响应进行解析获取到需要的信息,将这个信息保存到Item实体类中,然后yield返回这个item将其
交给引擎,引擎将其给管道,由管道进行持久化存储。

终端中的命令:
创建一个Scrapy框架项目:在终端中输入:scrapy startproject 项目名
创建一个爬虫:在终端中输入:cd 项目名,进入项目后输入:scrapy genspider 爬虫名 域名(这个域名就是要爬取的起始地址)
创建一个CrawlSpider爬虫:在终端中输入:cd 项目名,进入项目后输入:scrapy genspider -t crawl 爬虫名 域名
运行爬虫:在终端中输入:cd 项目名,进入项目后输入:scrapy  crawl 爬虫名
scrapy shell脚本:在终端中输入:scrapy shell 域名,进入后可以进行各种调试或xpath获取数据等

scrapy实现链家二手房的数据获取并进行持久化存储相关推荐

  1. 基于Scrapy的链家二手房爬虫

    摘要 本项目是python课程的期末练手项目,在简要学习完python和爬虫相关的Scrapy框架后,基于这两者的运用最终完成了对于链家网站二手房页面的信息进行爬取,并将爬取的数据存放于MongoDB ...

  2. Python爬虫框架Scrapy入门(三)爬虫实战:爬取长沙链家二手房

    Item Pipeline介绍 Item对象是一个简单的容器,用于收集抓取到的数据,其提供了类似于字典(dictionary-like)的API,并具有用于声明可用字段的简单语法. Scrapy的It ...

  3. python-scrapy-MongoDB 爬取链家二手房

    python-scrapy-MongoDB 爬取链家二手房 链家二手房房源数据抓取 目标网址为http://bj.lianjia.com/ershoufang/ 分析网址 创建项目 scrapy st ...

  4. 北京链家二手房数据分析

    首先我们需要将链家二手房的数据抓取下来,用我们上课学的内容,很容易实现(bs4,re,urllib,搞定!): import re import csv from bs4 import Beautif ...

  5. 爬取北京链家二手房数据

    利用python爬取了北京链家主页的二手房数据,爬取时间为2020年1月8日.由于链家只显示了100页.每页30条,因此只能爬取3000条数据. 后续将爬取各区的小区名,对每个小区的在售二手房数据进行 ...

  6. php爬取房源,Python 爬虫 链家二手房(自行输入城市爬取)

    因同事想在沈阳买房,对比分析沈阳各区的房价,让我帮忙爬取一下链家网相关数据,然后打 算记下笔记 用于总结学到的东西&用到的东西. 一.爬虫需要会什么? 学习东西 首先你要知道它是干嘛的.爬虫 ...

  7. PyQt5+Python+Excel链家二手房信息爬取、可视化以及数据存取

    成果图: 第一步运行代码searsh.py,效果如下 第二步选择你所需要爬取数据的城市,如湖北-武汉 然后搜索,结果如下 如果你想爬取更多信息,只需要点击下一页即可 第三步,保存数据.可以将所显示的所 ...

  8. python分析链家二手房信息----数据分析实战(一)

    链家二手房信息 # 导入需要的库:科学计算包numpy, pandas 可视化包matplotlib, seaborn 机器学习包 sklearn import numpy as np import ...

  9. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

最新文章

  1. 代码改变世界,这 72 张面孔牛逼了!!!
  2. 兼容低版本迅雷的js调用
  3. 初学Portal的基本概念
  4. 商业游戏美术成本已超1000万,研发门槛连续飙升,CP砸不起怎么办?
  5. C#创建WinForm应用程序的入口点
  6. grails安装部署_grails中文版
  7. xcodebuild -exportArchive -allowProvisioningUpdates
  8. 智慧城市的宠儿 大数据为城市建设添彩
  9. 整站下载工具webHttracker webside copier
  10. PCB电路板生产完成分析
  11. 软件测试初学者如何编写Jmeter测试脚本?
  12. 使用pm2部署vue项目
  13. 以太坊搭建私链(4)——新建账户、查看账户信息、转账、挖矿、添加节点等操作
  14. 什么是美国能源之星计划?
  15. BUG:Android开发模拟器运行出现Detected ADB对话框
  16. OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda\envs\pytorch-1.4\lib\site-package
  17. 电脑出现missing operating system解决办法
  18. synctoy 远程同步_使用SyncToy将任何文件夹同步到Dropbox
  19. Zotero+Web of Science 实现批量导入下载文献
  20. 网友鸿蒙谷歌的Android,华为鸿蒙OS已经确认更名?新名字更加令人惊艳!网友:过目难忘...

热门文章

  1. 3*3 数字拼图(去除无解的随机组合)
  2. DTW 动态时间规整
  3. 苹果个人账户转成公司账户
  4. python 写脚本 获取qq好友地理位置_Python获取统计自己的qq群成员信息的方法
  5. HUELOJ 1109: 打印数字图形(函数专题)
  6. 远程桌面连接的工具及使用方法
  7. 天池学习赛 -【零基础入门语音识别-食物声音识别】Task1 食物声音识别-Baseline【代码详细手写解释】
  8. 面试——说说你最荣耀的事(你做过最有成就感的事情)
  9. java类 家族成员 姓氏_java题目 将一些学生分别按姓氏分类,每个姓氏的学生输出到一行上。...
  10. 在linux环境下测试和使用aria2c