Scrapy爬取链家数据(一):上手Scrapy框架

   日期:2024-12-26    作者:8s16r 移动:http://3jjewl.riyuangf.com/mobile/quote/41603.html

        最近在关注北京房价变化,关注策略为先筛选小区,然后筛选小区内房价。就实现思路而言,首先想到的是使用爬虫爬取链家网中的数据并保存至数据库中,然后进行简单分析,得出小区及房价变化趋势。经过简单技术选型,决定采用scrapy框架完成上述数据爬取,使用mysql记录数据,记录数据样例如图所示。本系列文章包含爬取小区信息爬取房价信息具体实现及实现过程中问题处理方法

        本次实现选取的Python版本为3.12.1,默认pip等工具已经具备。IDE为Pycharm社区版本。为了屏蔽shell工具差异,本次实现中所有命令均是在IDE内的终端中执行。

        Scrapy 是一个快速的高级网络抓取框架,用于抓取网站并从其页面中提取结构化数据。它可从广泛用于数据挖掘到监控和自动化测试等场景。通过Scrapy安装指南得知,Scrapy 需要 Python 3.8+,CPython 实现(默认)或 PyPy 实现。建议安装前校验所使用的Python版本。首先选取自己常用代码存放目录执行如下命令安装Scrapy框架。

 

命令执行完成后, 在终端内执行如下命令校验Scrapy是否安装成功。

 

如果出现对应版本号,则说明安装成功。其次执行如下命令创建Scrapy项目。

 

其中,myproject为自定义项目名称,[project_dir]为可选参数,该参数定义项目路径。本例中项目名称为“lianjia”执行成功后,进入项目路径,发现项目结构如下图所示

 

至此,完成lianjia Scrapy项目骨架初始化完成。本例项目所在文件夹为lianjia,项目名称为lianjia。

        本节简要介绍项目结构中各个文件用途,为后续实践奠定一定的理论基础。(1)文件,该文件为项目基础配置文件,主要用于配置部署参数,包含项目在完成开发后部署至生产环境时的配置信息,本案例在本地运行,因此未对该文件作修改。(2)文件定义数据结构,Scrapy框架将解析的最终结果以字典形式返回,简单来说即在该文件中定义了什么字段,就可以在返回结果中包含什么字段。(3,下载器中间件是介入到 Scrapy 的 spider 处理机制的钩子框架,可以添加代码来处理发送给 Spiders 的 response 及 spider 产生的 item 和 request,简单来说就是就是在发送请求和收到相应中间插入自定义处理逻辑,针对请求来说可以构造请求参数等,针对响应来说可以过滤响应结果参数等。(4,该文件为爬虫配置文件,包括设置爬虫名称、设置并发访问数量、设置自定义中间件执行顺序及设置重试时间等。(5)spiders文件夹中包含自定义的。

        上述内容对于刚接触Scrapy框架的朋友来说可能有些抽象,不过随着后续实践,可以逐步加深对项目结构的认识和理解。

        通过前两步,我们在实操和概念上对Scrapy框架有了初步认识。本节具体实现一个简单的爬虫,该爬虫可以获取北京朝阳区域部分小区名称。该爬虫为后续爬取详细小区信息奠定初步实践基础。首先创建爬虫命令如下所示

 

 其中[-t template]为可选参数,本案例不设置该参数,使用basic模板。name为爬虫名称domain or url为爬虫爬取数据时允许的域名。本案例具体执行如下命令创建一个爬取链家小区的爬虫

 

命令执行完成后,进入spiders文件夹,发现生成了名为lianjiaxiaoqu.py的爬虫文件,该文件默认内容如下图所示

其中name字段的值为执行创建爬虫命令时输入的爬虫名称,allowed_domains值为允许的域名,start_urls值为爬虫入口,该值类型为列表,说明可以包含多个值。 其次编修改该文件内容,将内容修改如下

 

其中(1)将爬虫入口换为朝阳区域,楼龄在20年内的小区首页的url。(2)在解析方法中将首页小区列表中第一个小区名称解析并打印。

最后执行以下命令运行该爬虫

 

运行结果如图所示

从图中可以看出,“华腾新天地大厦” 为返回结果。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号