爬虫实战—爬取房天下全国所有的楼盘并入库(附源码)
1.创建项目
使用命令创建scrapy项目:scrapy startproject fang进入到spiders文件中: cd fang/fang/spiders创建爬虫文件:scrapy genspider sfw https://www.fang.com/SoufunFamily.htm
2.xpath解析页面,获取所需元素
快捷键“ctrl+shift+x”,调出xpath插件,通过xpath语法获取全国“省,市”
3.获取省和市
注意:当市有多行时,第二行开始就没有了省份,需要作出判断,为市添加对应的省份
class SwfSpider(scrapy.Spider):name = 'swf'allowed_domains = ['https://www.fang.com/SoufunFamily.htm']start_urls = ['https://www.fang.com/SoufunFamily.htm']def parse(self, response):tr_list = response.xpath('//div[@id="c02"]//tr')province_text = ''# 去除国外的城市for tr in tr_list[0:55]:province = tr.xpath('./td[2]//text()').extract_first().strip('\xa0')#给没有省份的市,添加省份if province:province_text = provinceelse:province = province_texta_list = tr.xpath('./td[3]/a')#city_list = tr.xpath('./td[3]/a/text()').extract()#for city in city_list:# print(province, city)
4.找链接,拼接成新房的连接
北京的新房的URL:https://newhouse.fang.com/house/s/
合肥的新房的URL:https://hf.newhouse.fang.com/house/s/
芜湖的新房的URL:https://wuhu.newhouse.fang.com/house/s/
只有北京的URL不同,其他的城市都是:城市名+“.newhouse.fang.com/house/s/”
,由此可以得出规律,在当前省市页面,解析获取市的路径,然后做拼接,获取市的新房的连接
创建Item对象,
class FangItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()province = scrapy.Field()city = scrapy.Field()name = scrapy.Field()price = scrapy.Field()
for a in a_list:city = a.xpath('./text()').extract_first()if city == '北京':url = 'https://newhouse.fang.com/house/s/'else:href = a.xpath('./@href').extract_first()url = href.split('.')[0]url = url + '.newhouse.fang.com/house/s/'# url = 'https://tongling.newhouse.fang.com/house/s/b93/'fang = FangItem(province=province,city=city)yield scrapy.Request(url=url,meta={'fang':fang,'url':url},callback=self.parseSecond)
5.获取新房的楼盘名和价格
通过上面呢,已经找到了全国每个市的新房链接,接下来,通过这个新房的链接,进入该页面,然后解析页面,获取楼盘名和价格
先以北京为例:爬取第一页
def parseSecond(self,response):fang = response.meta['fang']#xpath解析的代码#//div[@id="newhouse_loupai_list"]//div[@class="nlcd_name"]/a/text()#//div[@id="newhouse_loupai_list"]//div[@class="nhouse_price"]/span/text()div_list = response.xpath('//div[@id="newhouse_loupai_list"]//div[@class="nlc_details"]')for div in div_list:name = div.xpath('.//div[@class="nlcd_name"]/a/text()').extract_first().strip('\t\n')# .xpath('string(.)')意思是将标签中子标签的文本进行拼接# 他的调用者是seletor列表price = price.xpath('string(.)').extract_first().strip('\t\n').strip('广告').strip('\t\n')
6.多页下载
北京的首页:https://newhouse.fang.com/house/s/
北京的第二页:https://newhouse.fang.com/house/s/b92/
北京的尾页:https://newhouse.fang.com/house/s/b932/
接下来爬取所有的网页,页码的规律就为:“b9”+当前页码数,第一页特殊
我们爬取的元素有四个:province city name price
在parse中,爬取:province city在parceSecond中,爬取:name price
获取尾页数:
1.检查源码,解析,
2.注意有坑,当在中间的某一页时,会有两个class="last"标签,获取到的值为“首页”和“尾页”
# 尾页的href的值 last() 就是xpath中获取最后一个数据的方法
# href = response.xpath('//a[@class="last"][last()]/@href').extract_first()
3.获取到最后的页码时: /house/s/b932/
4.使用正则表达式提取页码32:
reg = '/b9(\d+)/' # /house/s/b932/
pattern = re.compile(reg)
当尾页获取到后:
1.在遍历之前,需要对页码数进行处理,第一次访问新房的页面时是第一页,URL是:https://newhouse.fang.com/house/s/
,第二页之后是:https://newhouse.fang.com/house/s/b92/,当前页就为“b9”后面的数,下次访问就是第三页,为“b93”,所以为当前页+1,
2.遍历页码,拼接url,
url1 = response.meta['url']for i in range(page,int(num)+1):url = url1 + 'b9' + str(i) + '/'yield scrapy.Request(url=url,callback=self.parseSecond,meta={'fang':fang,'url':url1})break
7.打开管道,保存数据
pymysql的使用:
1. conn 连接1. 端口号必须是整型2. 字符集不允许加-
2. cursor 游标
3. cursor.execute(sql)
4. conn.commit()
5. cursor.close()
6. conn.close()
8.最后获取到的数据
源码已放在github上:源码地址
爬虫实战—爬取房天下全国所有的楼盘并入库(附源码)相关推荐
- 爬虫实战-爬取房天下网站全国所有城市的新房和二手房信息(最新)
看到https://www.cnblogs.com/derek1184405959/p/9446544.html项目:爬取房天下网站全国所有城市的新房和二手房信息和其他博客的代码,因为网站的更新或者其 ...
- 详解Python爬取房天下的推荐新楼盘
点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 最近一直在关注Python写爬虫相关的知识,尝试了采用requests + Beautif ...
- Python爬虫实战,requests+openpyxl模块,爬取小说数据并保存txt文档(附源码)
前言 今天给大家介绍的是Python爬取小说数据并保存txt文档,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样 ...
- python爬取网站教学视频_零基础Python爬取网页文章和图片详细教学(内附源码、教学视频)...
Python爬虫,这个我相信对于很多人来说都不陌生! 今天小编给大家提供一份零基础Python爬取网页图片以及小说的代码并且详细的和大家讲解一下! 开发环境:版本Python3.6.2!(2版本会在2 ...
- 教你用PHP爬取王者荣耀英雄皮肤高清壁纸(附源码)
午饭后看到一篇文章关于"用Python爬取王者荣耀官网的英雄皮肤图片",于是顺手用PHP也写了一个,在这里给大家分享一下,贴出源码: //下载王者荣耀皮肤图片 public fun ...
- 20行Python代码爬取2W多条音频文件素材【内附源码+详细解析】新媒体创作必备
大家好,我是辣条. 今天的内容稍显简单,不过对于新媒体创作的朋友们还是很有帮助的,你能用上的话记得给辣条三连! 爬取目标 网站:站长素材 工具使用 开发工具:pycharm 开发环境:python3. ...
- 详解Python 采用 requests + Beautiful Soup 爬取房天下新楼盘推荐
最近一直在关注Python写爬虫相关的知识,尝试了采用requests + Beautiful Soup来爬取房天下(原搜房网)的推荐新楼盘. 不用不知道,一用发现有惊喜也有惊吓,本文就一同记录下惊喜 ...
- python爬虫——爬取房天下
python爬虫--爬取房天下 话不多说,直接上代码! import requests as req import time import pandas as pd from bs4 import B ...
- Python爬虫案例3:爬取房天下房价等各种信息
爬取房天下网站,爬取的内容: 区域.小区名.总价.房型.面积.单价.朝向.楼层位置.装修情况.建筑时间.是否有电梯.产权类型.住宅类型.发布日期 信息保存:保存在csv中 数据结果: 1.先建立爬虫项 ...
最新文章
- 3G突破必须打破漫游费的限制
- Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...
- python学习------文件处理
- 大数据集群启停shell脚本:hadoop(hdfs、yarn)、hbase集群启停
- 查看当前机器.net 版本的方法
- k近邻算法(KNN)-分类算法
- Android常见概念
- mybatis中useGeneratedKeys和keyProperty的作用
- java集成微信扫码登录
- 规则引擎drools教程一
- 【MEMS传感器】BMI160九轴传感器SPI驱动
- linux ram构架 C#编译器,如何使用imdisk和C#创建RAM磁盘?
- 大数据入门教程系列之Hive篇汇总
- Vue和Springboot实现SM4加密和解密(前端可加密,后端可加解密,MD5同理)
- DSP CCS12.00 芯片:TMS320F28335 外部中断 XINT1, 和映射区域的 k1 -- k4 按键的功能实现
- Delphi TStringList DBRichEdit 删除尾部多余换页符
- 命令提示符(文件操作基础)
- STM32 学习笔记 expected a type specifier
- 李洪超 硬件工程师_做一个优秀硬件工程师
- 穿过网络防火墙监视的木马下载器(转)