使用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解析爬取链家相关推荐

  1. 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中

    我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...

  2. Scrapy实战篇(一)之爬取链家网成交房源数据(上)

    今天,我们就以链家网南京地区为例,来学习爬取链家网的成交房源数据. 这里推荐使用火狐浏览器,并且安装firebug和firepath两款插件,你会发现,这两款插件会给我们后续的数据提取带来很大的方便. ...

  3. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  4. Python爬取链家成都二手房源信息

    作者 | 旧时晚风拂晓城 编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 公众号后台回复:「成都二手房数据」,获 ...

  5. python爬取链家新房_Python爬虫项目--爬取链家热门城市新房

    本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) 环境 win8, python 3.7, pycharm 正文 1. 目标网站分析 通过分析, 找出相关url, 确 ...

  6. python爬取链家网的房屋数据

    python爬取链家网的房屋数据 爬取内容 爬取源网站 爬取内容 爬取思路 爬取的数据 代码 获取房屋url 获取房屋具体信息 爬取内容 爬取源网站 北京二手房 https://bj.lianjia. ...

  7. python 爬取链家数据_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  8. Python爬取链家成都二手房源信息,异步爬虫实战项目!

    本文先熟悉并发与并行.阻塞与非阻塞.同步与异步.多线程.多线程.协程的基本概念.再实现asyncio + aiohttp爬取链家成都二手房源信息的异步爬虫,爬取效率与多线程版进行简单测试和比较. 1. ...

  9. 爬取链家网二手房数据并保存到mongodb中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 爬取链家网二手房数据并保存到mongodb中 文章目录 前言 一.爬虫的介绍 二.协程的介绍 三.css选择器 四.基于asyncio ...

最新文章

  1. R:关系型数据库管理
  2. 使用Prometheus和Grafana实现SLO
  3. WindowManager.LayoutParams各种flag含义
  4. 关于子网划分的几个捷径
  5. vue lang_推荐一个基于Vue 的 H5 快速开发模板
  6. 有关Cassandra节点之间的通信:Gossip【译】
  7. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用...
  8. 【数据结构】深度优先和广度优先比较
  9. map.entryk,v小用法(转)
  10. 读书笔记18:命令模式
  11. windows2003手工安装配置php5详细指南
  12. linux根文件系统与内核合二为一
  13. 元宇宙火了,智能家居跟不跟?
  14. 弱电机房工程搬迁工作内容(方案)
  15. 如何利用Excel批量下载网页图片?
  16. mac os 13 通过网线共享mac的(wifi)网络
  17. DBSCAN原理及matlab仿真代码
  18. 对UART、RS232、485通信的理解
  19. 智能灯杆网关有什么必备功能
  20. android开发笔记之Google Analytics

热门文章

  1. web项目034-----JS模版引擎
  2. 30ea什么意思_ea阶段是什么?你未必全知道!
  3. RocketMQ(10)——发送延时消息
  4. 《炬丰科技-半导体工艺》三维硅MEMS结构微加工
  5. 热点drcom 破解
  6. matlab 离散频域分析,离散系统频域分析及matlab实现.doc
  7. WEBVTT字幕格式转SRT
  8. 机器学习数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
  9. PWR-低功耗模式-STM32F4
  10. 发展存储芯片产业 中国是认真的