使用xpath解析爬取链家
使用xpath解析爬取链家
- 爬取链家
- 将数据存储到redis
爬取链家
from urllib import request
from time import sleep
from lxml import etree
import csv
import redis
import re# 1 数据抓取
# 定义一个函数,用于将页码,城市等信息转化为一个Request对象
def request_from(url,page,city):# 请求头headers = {'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}# 拼接urlpage_url = url %(city,page)# 创建请求对象return request.Request(url=page_url,headers=headers)# 定义一个函数,抓取页面信息(根据城市名,起始页和终止页)def fetch_pages(url,city,start,end):for page in range(int(start),int(end)+1):# 创建请求对象req=request_from(url=url,city=city,page=page)# 发起请求res=request.urlopen(req)# 将res中的响应体读取处理,并且放入生成器中# sleep(1)# print(res.read()) #测试能不能获取页面#sleep(1)yield res.read().decode('utf-8')# 2 数据的解析
def analysis_pages(pages):for page in pages:# 把每个html页面创建出一个节点树page_tree = etree.HTML(page)#将html字符串转化成节点树hoose_list = page_tree.xpath("//li[starts-with(@class,'clear')]")# print(hoose_list)for house in hoose_list:#创建一个字典,用于整合每个房屋的具体信息item = {}# 标题item['tiele'] = house.xpath(".//div[@class='title']//a/text()")[0]# 房屋信息item['houseInfo'] = "".join(house.xpath(".//div[@class='houseInfo']//text()"))# 地址信息item['positionInfo'] = "".join(house.xpath(".//div[@class='positionInfo']//text()"))# 单价item['unitPrice'] = re.findall(pattern=r"\d+",string=house.xpath(".//div[@class='unitPrice']//text()")[0])[0]# 总价item['totalPrice'] = house.xpath(".//div[@class='totalPrice']//span/text()")[0]# 图片链接item['picUrl'] = house.xpath(".//img[@class='lj-lazy']/@data-original")[0]# print(item)yield item# 3 数据的存储
def write_to_csv(data):#打开一个csv表格文件fp = open('ershoufang.csv','a+',newline='')#用追加的方式打开#创建一个csv的写对象writer = csv.writer(fp)writer.writerow(['title','houseInfo','positionInfo','unitPrice','totalPrice','picUrl'])# 写内容for house in data:values=[]for k,v in house.items():values.append(v)writer.writerow(values)fp.close()if __name__ == '__main__':url = 'https://%s.lianjia.com/ershoufang/pg%d'city = input('请输入城市的代号:')start = input('请输入起始页码:')end = input('请输入终止页码:')pages = fetch_pages(url=url,city=city,start=start,end=end)house_list = analysis_pages(pages)write_to_csv(house_list)
将数据存储到redis
在第三步存储数据中加入一个函数,同时导入一下json模块
# 存储到redis数据库
def write_to_redis(data):#创建一个redis链接 主机名 端口号 数据库rds = redis.StrictRedis(host='127.0.0.1',port=6379,db=6)for house in data:rds.lpush('ershoufang',json.dumps(house))
# 最后在 if __name__ == '__main__':下还要加入write_to_redis(house_list)
redis可视化工具链接
链接:https://pan.baidu.com/s/1Ioa0Oaw_IL8wXGjeyy7RPg
提取码:0vgf
先安装redis数据库,再安装可视化工具
安装按照默认步骤一步步来即可
安装完后,可在终端输入命令查看
redis-server
redis-cli
创建一个redis数据库
运行.py文件然后查看redis
可以发现数据存入进来了
顺带一提,爬取链家中北京的资源时会出现一些bug,某一段的数据会有大量重复
追加测试
'''
需求报告:
爬取以下城市:北京、上海、深圳、广州、天津、武汉、杭州、成都、西安、郑州
爬取的数据:标题、位置信息、房屋信息、单价、总价
存储数据都存到一张csv表中属性有:title、city、positionInfo、houseInfo、unitPrice、totalPrice
'''
使用xpath解析爬取链家相关推荐
- 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中
我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...
- Scrapy实战篇(一)之爬取链家网成交房源数据(上)
今天,我们就以链家网南京地区为例,来学习爬取链家网的成交房源数据. 这里推荐使用火狐浏览器,并且安装firebug和firepath两款插件,你会发现,这两款插件会给我们后续的数据提取带来很大的方便. ...
- python爬房源信息_用python爬取链家网的二手房信息
题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...
- Python爬取链家成都二手房源信息
作者 | 旧时晚风拂晓城 编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 公众号后台回复:「成都二手房数据」,获 ...
- python爬取链家新房_Python爬虫项目--爬取链家热门城市新房
本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) 环境 win8, python 3.7, pycharm 正文 1. 目标网站分析 通过分析, 找出相关url, 确 ...
- python爬取链家网的房屋数据
python爬取链家网的房屋数据 爬取内容 爬取源网站 爬取内容 爬取思路 爬取的数据 代码 获取房屋url 获取房屋具体信息 爬取内容 爬取源网站 北京二手房 https://bj.lianjia. ...
- python 爬取链家数据_用python爬取链家网的二手房信息
题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...
- Python爬取链家成都二手房源信息,异步爬虫实战项目!
本文先熟悉并发与并行.阻塞与非阻塞.同步与异步.多线程.多线程.协程的基本概念.再实现asyncio + aiohttp爬取链家成都二手房源信息的异步爬虫,爬取效率与多线程版进行简单测试和比较. 1. ...
- 爬取链家网二手房数据并保存到mongodb中
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 爬取链家网二手房数据并保存到mongodb中 文章目录 前言 一.爬虫的介绍 二.协程的介绍 三.css选择器 四.基于asyncio ...
最新文章
- R:关系型数据库管理
- 使用Prometheus和Grafana实现SLO
- WindowManager.LayoutParams各种flag含义
- 关于子网划分的几个捷径
- vue lang_推荐一个基于Vue 的 H5 快速开发模板
- 有关Cassandra节点之间的通信:Gossip【译】
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用...
- 【数据结构】深度优先和广度优先比较
- map.entryk,v小用法(转)
- 读书笔记18:命令模式
- windows2003手工安装配置php5详细指南
- linux根文件系统与内核合二为一
- 元宇宙火了,智能家居跟不跟?
- 弱电机房工程搬迁工作内容(方案)
- 如何利用Excel批量下载网页图片?
- mac os 13 通过网线共享mac的(wifi)网络
- DBSCAN原理及matlab仿真代码
- 对UART、RS232、485通信的理解
- 智能灯杆网关有什么必备功能
- android开发笔记之Google Analytics