python抓取链家房源信息(三)
之前写过一个链家网北京二手房的数据抓取,然后本来今天想着要把所有的东西弄完,但是临时有事出去了一趟,耽搁了一下,然后现在是想着把北京的二手房的信息都进行抓取,并且存储在mongodb中,
首先是通过'https://bj.lianjia.com'的url将按照区域划分和地铁路线图进行划分的所有的url抓取出来进行存储,然后在进行下一步的分析,然后会每一套房源信息都会有一个data-housecode,标识是那一套房间,为了避免有重复的房源信息,在每套房的数据中将data-housecode,数据作为每一套房的标识,进行存储,然后在抓取到房源信息存储到mongodb中时,通过data-housecode进行判断,看当前房源是否已经存储完全,如果已经存储了,则不必插入,否则将该房源信息插入到mongodb中。
用的还是scrapy框架,然后只是在spider.py中添加了按照区和地铁路线图的所有的房源信息,当然根据区域和地铁还可以分的更细。。。
大致的爬虫的框架是:

在scrapy框架中,使用过程是,在spider.py中,将要获取的url请求给scheduler,然后通过download模块进行Request下载数据,如果下载失败,会将结果告诉scrapy engine,然后scrapy engine会稍后进行重新请求,然后download将下载的数据给spider,spider进行数据处理,抓取需要保存的按照地铁路线或者是区域的url,然后跟进url,将个个不同的url进行告诉scrapy engine,然后又通过相同的远离然后进行抓取,然后存储每个房源的标识和条件情况,然后将处理结果返回给item,通过item进行mongodb的存储。
scrapy.py中的代码如下:
#-*-coding:utf-8-*-
import scrapy
import re
from bs4 import BeautifulSoup
import time import json
from scrapy.http import Request
from House.items import HouseItem
import lxml.html
from lxml import etree
class spider(scrapy.Spider):
name = 'House'
url = 'https://bj.lianjia.com'
base_url = 'https://bj.lianjia.com/ershoufang'
def start_requests(self):
print(self.base_url)
yield Request(self.base_url,self.get_area_url,dont_filter=True) def get_area_url(self,response):
selector = etree.HTML(response.text)
results = selector.xpath('//dd/div/div/a/@href')
for each in results:
if 'lianjia' not in each:
url = self.url + each
else:
url = each
print(url)
yield Request(url, self.get_total_page, dont_filter=True)
def get_total_page(self,response):
soup = BeautifulSoup(response.text, 'lxml')
Total_page = soup.find_all('div', class_='page-box house-lst-page-box')
res = r'<div .*? page-data=\'{\"totalPage\":(.*?),"curPage":.*?}\' page-url=".*?'
total_num = re.findall(res, str(Total_page), re.S | re.M) for i in range(1, int(total_num[0])):
print(i)
url = response.url + 'pg' + str(i)
print(url)
yield Request(url, self.parse, dont_filter=True) def parse(self, response):
soup = BeautifulSoup(response.text,'lxml') message1 = soup.find_all('div',class_ = 'houseInfo')
message2 = soup.find_all('div',class_ = 'followInfo')
message3 = soup.find_all('div',class_ = 'positionInfo')
message4 = soup.find_all('div',class_ = 'title')
message5 = soup.find_all('div',class_ = 'totalPrice')
message6 = soup.find_all('div',class_ = 'unitPrice')
message7 = soup.find_all(name='a', attrs={'class': 'img'})
Flags = []
for each in message7:
Flags.append(each.get('data-housecode'))
num = 0
for flag,each,each1,each2,each3,each4,each5 in zip(Flags,message1,message2,message3,message4,message5,message6):
List = each.get_text().split('|')
item = HouseItem()
item['flag'] = flag
item['address'] = List[0].strip()
item['house_type'] = List[1].strip()
item['area'] = List[2].strip()
item['toward'] = List[3].strip()
item['decorate'] = List[4].strip()
if len(List) == 5:
item['elevate'] = 'None'
else:
item['elevate'] = List[5].strip()
List = each1.get_text().split('/')
item['interest'] = List[0].strip()
item['watch'] = List[1].strip()
item['publish'] = List[2].strip()
List = each2.get_text().split('-')
item['build'] = List[0].strip()
item['local'] = List[1].strip()
item['advantage'] = each3.get_text().strip()
item['price'] = each4.get_text().strip()
item['unit'] = each5.get_text().strip() print("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s "%(item['flag'],item['address'],item['house_type'],item['area'],item['toward'],
item['decorate'],item['elevate'],item['interest'],
item['watch'],item['publish'],item['build'],item['local'],item['advantage'],item['price'],item['unit']))
num += 1
yield item
python抓取链家房源信息(三)的更多相关文章
- python抓取链家房源信息(二)
试着用scrapy将之前写的抓取链家网信息的重新写了写 然后先是用了第一页的网页作为测试,调试代码,然后发现总是抓取的时候遇见了 类似于这样的问题,并且抓取不到信息 2017-03-28 17:52: ...
- python抓取链家房源信息
闲着没事就抓取了下链家网的房源信息,抓取的是北京二手房的信息情况,然后通过网址进行分析,有100页,并且每页的url都是类似的 url = 'https://bj.lianjia.com/ershou ...
- Python爬取链家二手房源信息
爬取链家网站二手房房源信息,第一次做,仅供参考,要用scrapy. import scrapy,pypinyin,requests import bs4 from ..items import L ...
- python爬取链家二手房信息,确认过眼神我是买不起的人
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- 【nodejs 爬虫】使用 puppeteer 爬取链家房价信息
使用 puppeteer 爬取链家房价信息 目录 使用 puppeteer 爬取链家房价信息 页面结构 爬虫库 pupeteer 库 实现 打开待爬页面 遍历区级页面 方法一 方法二 遍历街道页面 遍 ...
- 用python抓取智联招聘信息并存入excel
用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...
- Python 抓取网页并提取信息(程序详解)
最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...
- 使用python抓取58手机维修信息
之前在ququ的博客上看到说 python 中的BeautifulSoup 挺好玩的,今天下午果断下载下来,看了下api,挺好用的,完了2把,不错. 晚上写了一个使用python抓取58手机维修信息的 ...
- 使用python抓取有路网图书信息(原创)
以前挺喜欢去有路网买二手书的,但是有路网有个缺陷,就是放在图书列表中的书很多都没货了,尤其是一些热门的方向,比如android,在列表中的书大多都没有货了,你必须一个一个点进入查看详细信息才能得知图书 ...
随机推荐
- 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告
P2498 [SDOI2012]拯救小云公主 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到\(boss\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...
- C++——内存对象 禁止产生堆对象 禁止产生栈对象
用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题都是不易发觉的,比如内 ...
- bzoj4753: [Jsoi2016]最佳团体(分数规划+树形依赖背包)
菜菜推荐的“水题”虐了我一天T T...(菜菜好强强qwq~ 显然是个分数规划题,二分答案算出p[i]-mid*s[i]之后在树上跑依赖背包,选k个最大值如果>0说明还有更优解. 第一次接触树形 ...
- NOIP2010-2015后四题汇总
1.前言 正式开始的第一周的任务——把NOIP2010至NOIP2015的所有D1/2的T2/3写出暴力.共22题. 暴力顾名思义,用简单粗暴的方式解题,不以正常的思路思考.能够较好的保证正确性,但是 ...
- Redis基操
Redis key-value类型的缓存数据库 指定IP和端口连接redis: ./redis-cli -h ip -p port Redis基本操作命令 命令 返回值 简介 ping PONG 测试 ...
- eclipse show view失效的解决办法
今天打开eclipse,发现console窗口没有了,然后使用show view也无法打开,上网查找办法,找到了方法试了一下,窗口重置(Windows-->Perspective-->Re ...
- HTML标签marquee 来制作页面滚动
页面的自动滚动效果,可由javascript来实现,但是今天无意中发现了一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用m ...
- 介绍 JSON (转)
本文转自:http://www.json.org/json-zh.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于 ...
- LightOJ 1166 Old Sorting 置换群 或 贪心 水题
LINK 题意:给出1~n数字的排列,求变为递增有序的最小交换次数 思路:水题.数据给的很小怎么搞都可以.由于坐标和数字都是1~n,所以我使用置换群求循环节个数和长度的方法. /** @Date : ...
- Qt如何获得窗口的几何信息(Window Geometry)
一个窗口除去窗框以后,余下部分称为客户区域.获得窗口的几何信息(坐标,长宽等)有以下两组命令: 1. 包括窗框(即整个窗口):x(), y(), frameGeometry(), pos(), mo ...