【Python】动态页面爬取:获取链家售房信息(学堂在线 杨亚)

本文主要是介绍【Python】动态页面爬取:获取链家售房信息(学堂在线 杨亚),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、内容来源

任务:学会爬取一个网站的部分信息,并以".json"文件形式保存

课程来源:大数据分析师(第一期)(北邮 杨亚)

爬取网站:链家二手房 链家新房

二、准备工作

对于准备阶段,可参考:
【Python】Scrapy入门实例:爬取北邮网页信息并保存(学堂在线 杨亚)
1、创建工程
在cmd.exe窗口,找到对应目录,通过下列语句创建工程

scrapy startproject lianjia

2、创建begin.py文件
主要用于在Pycharm中执行爬虫工程(创建位置可参考后文工程文件层次图来理解)

from scrapy import cmdline
cmdline.execute("scrapy crawl lianjia".split())

3、修改items.py文件

import scrapy
class MyItem(scrapy.Item):name = scrapy.Field()desp = scrapy.Field()price = scrapy.Field()pass

4、修改setting.py文件

ITEM_PIPELINES = {'lianjia.pipelines.MyPipeline': 300,}

5、修改piplines.py
若无特殊保存格式需求,实际上所有爬虫的保存方式都一样

import jsonclass MyPipeline (object):def open_spider (self, spider):try:  #打开json文件self.file = open("Lianjia_MyData.json", "w", encoding="utf-8")except Exception as err:print (err)def process_item(self, item, spider):dict_item = dict(item)  # 生成字典对象json_str = json.dumps(dict_item, ensure_ascii = False) +"\n" #生成 json串self.file.write(json_str)  # 将 json串写入到文件中return itemdef close_spider(self, spider):self.file.close()  #关闭文件

三、爬虫核心

新建一个spider.py文件

import scrapy
from lianjia.items import MyItemclass mySpider(scrapy.spiders.Spider):name = "lianjia"allowed_domains = ["lianjia.com"]start_urls = ["https://bj.lianjia.com/ershoufang/"]start_urls = []for page in range(1,4):url = "https://bj.lianjia.com/ershoufang/pg{}/".format(page)start_urls.append(url)def parse(self, response):item = MyItem()for i in range(32):item['name'] = response.xpath('//*[@id="content"]/div[1]/ul/li[{}]/div[1]/div[2]/div/a/text()'.format(i+1)).extract()item['desp'] = response.xpath(#'//*[@id="content"]/div[1]/ul/li[{}]/div[1]/div[2]/div/text()''//*[@id="content"]/div[1]/ul/li[{}]/div[1]/div[3]/div/text()'.format(i+1)).extract()item['price'] = response.xpath('//*[@id="content"]/div[1]/ul/li[{}]/div[1]/div[6]/div[1]/span/text()'.format(i+1)).extract()if (item['name'] and item['desp'] and item['price']):   # 去掉值为空的数据yield (item)     # 返回item数据给到pipelines模块else:print(":::::::::error::::::::::",i+1,item['name'])

这里细节就不介绍了,但愿我若干年以后需要用到相关知识的时候还能记起吧!

四、补充资料

1、工程文件层次图
在这里插入图片描述
2、部分结果:
在这里插入图片描述

五、附加实验(作业)

在这里插入图片描述
spider.py

import scrapy
from lianjia2.items import MyItemclass mySpider(scrapy.spiders.Spider):name = "lianjia2"allowed_domains = ["lianjia.com"]#start_urls = ["https://bj.fang.lianjia.com/loupan/nhs1"]start_urls = []for page in range(1,6):url = "https://bj.fang.lianjia.com/loupan/nhs1pg{}/".format(page)start_urls.append(url)def parse(self, response):item = MyItem()for i in range(10):item['name'] = response.xpath('/html/body/div[4]/ul[2]/li[{}]/div/div[1]/a/text()'.format(i+1)).extract()item['desp'] = response.xpath('/html/body/div[4]/ul[2]/li[{}]/div/div[3]/span/text()'.format(i+1)).extract()item['price'] = response.xpath('/html/body/div[4]/ul[2]/li[{}]/div/div[6]/div[1]/span[1]/text()'.format(i+1)).extract()if (item['name'] and item['desp'] and item['price']):   # 去掉值为空的数据yield (item)     # 返回item数据给到pipelines模块else:print(":::::::::error::::::::::",i+1,item['name'])

piplines.py进行一定修改,删除小部分重复的数据(不写也行)

dict_item['desp'] = dict_item['desp'][0][3:]

在这里插入图片描述

5.13补充
【Python】爬取链家网页后的数据处理:北京房价排序(学堂在线 杨亚)

这篇关于【Python】动态页面爬取:获取链家售房信息(学堂在线 杨亚)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735824

相关文章

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插