Python里scrapy爬虫

scrapy爬虫,正好最近成都房价涨的厉害,于是想着去网上抓抓成都最近的房价情况,顺便了解一下,毕竟咱是成都人,得看看这成都的房子我以后买的起不~


话不多说,进入正题:

任务

抓取链家网(成都)的所有新房以及二手房价格、位置相关信息。

实验流程

1.确定抓取目标.

2.制定抓取规则.

3.'编写/调试'抓取规则.

4.获得抓取数据

1.确定抓取目标

1.1新房抓取目标

我们看到在成都楼盘列表页面,有楼盘名字、均价(每平方)和所属行政区,非常好,这正是我们想要抓取的内容!

于是确定目标:

抓取成都新房的所有楼盘名称、均价信息、所属行政区和URL信息。

1.2二手房抓取规则

我们来到二手房的列表页面,并且点击进入二手房详情页面,发现网站所展示的内容就比新房的内容的多得多了,这样我们也能抓取更多的数据了!在这里,我决定在二手房页面抓取二手房地址、总价、每平米价、面积、所属行政区域和URL信息。

2.制定抓取规则

2.1新房抓取规则

由于新房的信息直接在新房列表网页上就能直接抓取,所以只需要在新房列表网页分析html结构找到我们想要的数据即可。

对于均价来说,我们所需要的信息在 //div[@class='average']/span/text()

对于楼盘名称来说,我们所需要的信息在 //div[@class='col-1']/h2/a/text()

当然了,我们所需要的URL也在 //div[@class='col-1']/h2/a/@href

对于行政区来说,所需要的信息在 //div[@class='where']/span/text(),当然了,我们还得使用正则将所属行政区匹配出来

如何抓取所有的新房信息呢?我们利用下一页来循环

2.2二手房抓取规则

抓取规则和新房抓取规则大同小异,不过这里有一点小小的区别是我们需要利用二手房列表页面抓取到的URL,进入二手房详情页抓取信息,不过这一点我们将在代码实现中讲到,在这儿先按住不表,还是继续分析html结构。

小区名称在 div[@class='communityName']/a[@class='info']/text()

房总价在 div[@class='price ']/span[@class='total']/text()

每平方价在 div[@class='price ']/div[@class='text']/div/span/text() ,当然这里我们还是得用正则把两个引号给弄掉~

所属行政区在 div[@class='areaName']/span[@class='info']/a/text()的第一个text

面积在 div[@class='houseInfo']/div[@class='area']/div[@class='mainInfo']/text()

当然了,对于循环获得所有信息来说,我们还是用网站的“下一页”来做。

3.'编写/调试'抓取规则

为了让调试爬虫的粒度尽量的小,我将编写和调试模块糅合在一起进行.


3.1'编写/调试'新房抓取规则

首先我们得定义一个item:

class NewHoseItem(scrapy.Item):

然后我们尝试抓取一个新房列表页面下的所需数据吧~

import scrapyfrom fangjia.items import NewHouseItemclass NewsHouseSpider(scrapy.Spider):

测试通过!

现在我们再编写一下循环的规则就ok了!

由于我们需要获取到totalpage的值和curpage的值,所以我们得对获取到的字符串稍微的处理一下,这里我们用到的是split()

next_page = response.xpath("//div[@class='page-box house-lst-page-box']/@page-data").extract_first().split(',')[1].split(':')[1]

组装到我们的原函数里面

import scrapy

测试,成功!

3.2'编写/调试'二手房抓取规则

二手房抓取规则和新房差不多,所以写简单一点,其中主要说明一点是利用二手房列表页面抓取到的URL,进入二手房详情页抓取信息。

先定义item:

class OldHouseItem(scrapy.Item):

当然了,我们还是先写出一个二手房列表页面的抓取规则,其中,得利用抓取到的URL再进入二手房详情页进行抓取。

编写爬虫:

import scrapy

发现有重定向:

一看,是robot的原因,于是我们进入 http://cd.lianjia.com/robots.txt 一探究竟

在robots.txt最下面看到

User-agent:*

Disallow:/

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群

626062078,我们一起学Python!

Python抓取成都房价信息的更多相关文章

  1. 使用python抓取美团商家信息

    抓取美团商家信息 import requests from bs4 import BeautifulSoup import json url = 'http://bj.meituan.com/' ur ...

  2. 用python抓取求职网站信息

    本次抓取的是智联招聘网站搜索“数据分析师”之后的信息. python版本: python3.5. 我用的主要package是 Beautifulsoup + Requests+csv 另外,我将招聘内 ...

  3. python抓取贝壳房源信息

    分析了贝壳的房源信息数据,发现地址链接的参数传递是有规律的 https://tj.ke.com/chengjiao/a3l4/ a3 实际表示的 l4 表示的是 然后 将复合条件拼成一个字符串,带过去 ...

  4. Python 抓取网页并提取信息(程序详解)

    最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...

  5. 用python抓取智联招聘信息并存入excel

    用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...

  6. 使用python抓取58手机维修信息

    之前在ququ的博客上看到说 python 中的BeautifulSoup 挺好玩的,今天下午果断下载下来,看了下api,挺好用的,完了2把,不错. 晚上写了一个使用python抓取58手机维修信息的 ...

  7. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  8. python抓取链家房源信息(二)

    试着用scrapy将之前写的抓取链家网信息的重新写了写 然后先是用了第一页的网页作为测试,调试代码,然后发现总是抓取的时候遇见了 类似于这样的问题,并且抓取不到信息 2017-03-28 17:52: ...

  9. 使用Python抓取猫眼近10万条评论并分析

    <一出好戏>讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何? 黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演 ...

随机推荐

  1. HTML、CSS、JS 样式

    把一个数组(一维或二维等)的内容转化为对应的字符串.相当于把print_r($array)显示出来的内容赋值给一个变量.$data= array('hello',',','world','!'); $ ...

  2. Linux防火墙配置—允许转发

    一.实验目标 在上一次"Linux基础网络搭建实验"中,内.外网虚拟机之所以能Ping通,是因为暂时关闭了防火墙,然而现实中这样操作显然存在很大的安全隐患,所以本次实验在上次实验的 ...

  3. JS理解之闭包

    首先,闭包是什么?这个问题,百度上一大堆,然后我也是,现在学的有点累,来回顾一下吧算是,懂的自动略过,小弟不才,道行入不了你们法眼. 我认为的闭包是,就是取到,不是在自己作用域内或者按照js的规则,娶 ...

  4. bzoj4826 [Hnoi2017]影魔

    Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵 ...

  5. C专家编程阅读笔记

    周末闲来无事,(哗),好久之前买的C专家编程一直没看,翻起来看了一下 尽量不使用unsigned 尽量不要在代码中使用unsigned,尤其是一些看起来是无符号类型的数字,比如年龄等,因为难免要使用u ...

  6. CSS3 02. 边框、边框圆角、边框阴影、边框图片、渐变、线性渐变、径向渐变、背景、过渡transition、2D转换

    边框圆角 border-radius 每个角可以设置两个值,x值.y值 border-top-left-radius:水平半径 垂直半径 border-radius:水平半径/垂直半径 border- ...

  7. 蓝桥杯-核桃的数量-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  8. Java IO最详解

    初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见 ...

  9. nginx 高可用

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  10. 微信公众号开发笔记3-sdk接入(nodejs)

    另一个2小时 access_token是需要2小时更新一次,在这里,又引入了一个2小时获取一次的字段,这个字段是: jsapi_ticket,这个字段是接入sdk的前提.与access_token类似 ...