Scrapy抓取有关房屋租售信息并生成手机App(一)

先记录下我用scrapy做的一个小例子。

使用的软件版本:python 2.7.11, scrapy 1.0.5

1. Scrapy通常所使用操作过程:UR2IM

即URL, Request, Response, Items, More URLs。 可以用下面这张图简单的解释:

从最初的一个URL发出请求,在得到的Response里面获得需要抓取的信息和获得更多需要抓取的URL,然后将抓取到的信息进行保存并开始更多的抓取工作。

2. Scrapy shell

Scrapy shell 是非常有用的工具,经常用来调试使用。那么在 pip install scrapy 安装scrap有成功之后,比如在cmd下输入:

>scrapy shell http://www.baidu.com

得到返回如下,就说明百度的主页已经抓取成功了:

有些网站为了防止被恶意爬虫抓取,需要模拟浏览器进行,我们可以在shell 命令中加入USER_AGENT 属性,即为:

>scrapy shell -s USER_AGENT="Mozilla/6.0" http://www.baidu.com

然后这里便可以使用Xpath解析HTML中所需要的字段,这里再输入:

>>> print response.xpath(‘//title/text()‘).extract()[0]
百度一下,你就知道

3. Xpath表达式

在审查元素中可以看到我们索要抓取内容在HTML中的位置:

例如项目中所需要抓取的信息有:标题,所在地理位置和价格。

由此可以得到其Xpath表达式为:

>>> response.xpath(‘//h1/text()‘).extract()    #title
[u‘MUST BE SEEN !! BRAND NEW STUDIO FLATS IN EXCELLENT LOCATION !!‘]

>>> response.xpath(‘//strong[@class="ad-price txt-xlarge txt-emphasis "]/text()‘)[0].extract()    #price
u‘\n\xa3775.00pm‘

>>> response.xpath(‘//*[@class="ad-location truncate-line set-left"]/text()‘).extract()    #address
[u‘\nSouth Croydon, London\n‘]

4. 创建Scrapy项目

在cmd中cd 到想要创建项目的目录下:

>scrapy startproject <project name>

第一步:定义需要抓取的元素

找到items.py 并编辑,会看到一个类名为项目名称和Item组的组合,编辑之:

from scrapy.item import Item, Field

class PropertiesItem(Item):

    title=Field()
    price=Field()
    description=Field()
    address=Field()
    image_urls=Field()

    images=Field()
    location=Field()

    url=Field()
    project=Field()
    spider=Field()
    server=Field()
    date=Field()

第二步:定义爬虫

在项目中cmd 输入:

>scrapy genspider basic gumtree    #basic is the name of this spider, gumtree is the attribute of allowd_domain

会看到spider 文件夹下出现basic.py 文件,编辑之:

# -*- coding: utf-8 -*-

import scrapy
from properties.items import PropertiesItem
from scrapy.http import Request
import urlparse

class BasicSpider(scrapy.Spider):
    name = "basic"
    allowed_domains = ["gumtree.com"]
    start_urls = (
        ‘https://www.gumtree.com/all/uk/flat/page1‘,
    )

    def parse(self, response):
        # get to next page.
        next_selector=response.xpath(‘//*[@data-analytics="gaEvent:PaginationNext"]/@href‘).extract()
        for url in next_selector:
            yield Request(urlparse.urljoin(response.url, url))

        # get into each item page.
        item_selector=response.xpath(‘//*[@itemprop="url"]/@href‘).extract()
        for url in item_selector:
            yield Request(urlparse.urljoin(response.url, url), callback=self.parse_item)

    def parse_item(self, response):
        item=PropertiesItem()
        item[‘title‘]=response.xpath(‘//h1/text()‘).extract()
        item[‘price‘]=response.xpath(‘//strong[@class="ad-price txt-xlarge txt-emphasis "]/text()‘)[0].re(‘[,.0-9]+‘)
        item[‘description‘]=[response.xpath(‘//p[@itemprop="description"]/text()‘)[0].extract().strip()]
        item[‘address‘]=[response.xpath(‘//*[@class="ad-location truncate-line set-left"]/text()‘).extract()[0].strip()]
        item[‘image_urls‘]=[response.xpath(‘//img[@itemprop="image"]/@src‘)[0].extract()]
        item[‘url‘]=[response.url]

        return item

在parse函数中我们使用到yield。其实yield我理解它有些像return, 他带有返回;而又不像return,应为他运行之后不会跳出for循环,而是继续执行。这样就达到了获取页面上每个条目,同时进行翻页的效果。

cmd下输入:

>scrapy crawl basic

便可使爬虫运行起来直到爬完这个目录下的所有条目,通常也会设置抓取的条目,来自动终止抓取:

>scrapy crawl basic -s CLOSESPIDER_ITEMCOUNT=100

时间: 2024-11-10 11:23:57

Scrapy抓取有关房屋租售信息并生成手机App(一)的相关文章

Scrapy抓取有关房屋租售信息并生成手机App(二)

由上一节中爬虫程序已经在scrapy中定义完成,我们准备生成app. 目前生成app的软件颇多,这里我们需要以数据库驱动,选择了appery.io. 1. 生成数据库 注册完成之后,先在database选项卡中添加一行新用户,名为root.随后添加新的数据库名为scrapy和新的collections名为properties. 完成即可见: 随后在collections中添加所需要的数据库字段: 属性都先选择string.数据库定义完成. 2. 接收数据 是的appery接收我们爬虫的数据需要A

scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立

本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visual studio一劳永逸,如果报错缺少前置依赖,就先安装依赖) 本篇主要对scrapy生成爬虫项目做一个基本的介绍 tips:在任意目录打开cmd的方式可以使用下面这两种方式 shift + 右键打开cmd(window10的powershell你可以简单理解为cmd升级版) 在路径框直接输入cmd

python实现爬虫(一)--- Scrapy框架抓取豆瓣书籍信息

Scrapy是一个用python实现都爬虫框架,简单易用,功能强大,只需要在框架的基础上自定义自己的分析规则即可,具体如何新建工程等待都在官方文档上面讲解得非常清楚,官方文档tutorial(http://doc.scrapy.org/en/latest/intro/tutorial.html)请保证下载较新版本的Scrapy(我的是0.24.2,scrapy -v)旧版本会出现一些问题. 下面我使用Scrapy抓取豆瓣上面编程书籍的一些简单信息 一.准备爬取的页面如下,新建一个douban工程

分布式爬虫:使用Scrapy抓取数据

分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自

通过Scrapy抓取QQ空间

毕业设计题目就是用Scrapy抓取QQ空间的数据,最近毕业设计弄完了,来总结以下: 首先是模拟登录的问题: 由于Tencent对模拟登录比较讨厌,各个防备,而本人能力有限,所以做的最简单的,手动登录后,获得Cookie信息,然后携带访问. 其次是数据接口: 通过对QQ空间的网页分析,数据主要是通过Json的形式返回.选择了两个数据接口进行数据抓取 每个QQ的详细信息接口: "http://user.qzone.qq.com/p/base.s8/cgi-bin/user/cgi_userinfo_

Java广度优先爬虫示例(抓取复旦新闻信息)

一.使用的技术 这个爬虫是近半个月前学习爬虫技术的一个小例子,比较简单,怕时间久了会忘,这里简单总结一下.主要用到的外部Jar包有HttpClient4.3.4,HtmlParser2.1,使用的开发工具(IDE)为intelij 13.1,Jar包管理工具为Maven,不习惯用intelij的同学,也可以使用eclipse新建一个项目. 二.爬虫基本知识 1.什么是网络爬虫?(爬虫的基本原理) 网络爬虫,拆开来讲,网络即指互联网,互联网就像一个蜘蛛网一样,爬虫就像是蜘蛛一样可以到处爬来爬去,把

scrapy抓取的页面中文会变成unicode字符串

不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html 现象:从scrapy抓取的页面中文会变成unicode字符串,如下图 2017-03-28 23:00:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.lagou.com/jobs/2617468.html> {'describe': [u'<div>\n <p>\u5c97\u

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

原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约,影响日后借书,而自己又懒得总是登录到学校图书馆借阅系统查看,于是就打算写一个爬虫来抓取自己的借阅信息,把每本书的应还日期给爬下来,并写入txt文件,这样每次忘了就可以打开该txt文件查看,每次借阅信息改变了,只要再重新运行一遍该程序,原txt文件就会被新文件覆盖,里面的内容得到更新. 用到的技术: Python版本是 2.7 ,同时用到了ur

教您使用java爬虫gecco抓取JD全部商品信息

gecco爬虫 如果对gecco还没有了解可以参看一下gecco的github首页.gecco爬虫十分的简单易用,JD全部商品信息的抓取9个类就能搞定. JD网站的分析 要抓取JD网站的全部商品信息,我们要先分析一下网站,京东网站可以大体分为三级,首页上通过分类跳转到商品列表页,商品列表页对每个商品有详情页.那么我们通过找到所有分类就能逐个分类抓取商品信息. 入口地址 http://www.jd.com/allSort.aspx,这个地址是JD全部商品的分类列表,我们以该页面作为开始页面,抓取J