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. struts2 之 ThreadLocal 和 ActionContext

    1. ThreadLocal:该类提供了线程局部(thtead-local)变量.threadLocal是一个容器,该容器中存放的数据可以保证线程安全. 案例如: public class Threa ...

  2. ArrayList和List主要区别 就是ArrayList类型不安全。

    什么是不安全? 1:List大家都知道初始化的时候需要定义其类型,例如 List<int> listTest = new List<int>():而ArrayList,例如:A ...

  3. 在 Intellij 中设置集成 Jenkins 服务器连接

    如何在 Intellij 中设置集成 Jenkins 服务器连接 在Intellij中可以很方便的设置Jenkins服务器,不用登录到浏览器中,在Intellij中即可浏览所有job,开发plugin ...

  4. A GDI+ Based Character LCD Control

    This is a renew. A GDI+ Based Character LCD Control by Conmajia Character liquid crystal display (LC ...

  5. URL传中文参数导致乱码的解决方案之encodeURI

    通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题: first:前端传递参数的时候需要对中文参数进行两次en ...

  6. C#网络程序设计(2)Socket基础编程

        本节介绍如何使用基础Socket实现TCP通信.     (1)Socket详细介绍: Socket的英文原义是"孔"或"插座".通常称作"套 ...

  7. [C#学习]1.Hello World

    在很多时候我们都是被helloworld带入编程的世界的,所以这句话应该算是我们程序员最熟悉的一句话了把.所以在这里,那我也照样以helloworld为例子来引入我们的C#学习. 在往常的hellow ...

  8. mysql导入导出sql文件(包括数据库和数据表的操作)

    废话不多说直接开始. 在windows命令行下登录mysql,创建一个test_01数据库,创建一个user表,并插入一条数据,如下 一.导出数据库test_01 1.退出数据库,在命令行中输入 my ...

  9. Play再识 - 不放弃的执着

    从写Play初识时,前面各种称赞play如何如何解放java web开发,最后因为网络被墙而无法正常编译,从而想到放弃.从来都有成为web开发高手的想法,今天又再一次进行尝试,惊喜的是有新的进展. 首 ...

  10. react native 升级到0.31.0的相关问题 mac Android Studio开发环境

    报错Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.facebook.re ...