这篇文章主要介绍创建一个简单的spider,顺便介绍一下对网页元素的选取方式(css selector, xpath selector)。

第一步:创建spider工程

打开命令行运行以下命令:

scrapy startproject homelink_selling_index

创建出的工程结构如下:

│  scrapy.cfg

│

└─lianjia_shub

    │  items.py

    │  pipelines.py

    │  settings.py

    │  __init__.py

    │

    └─spiders

            __init__.py

第二步:定义spider(homelink_selling_index)

需要抓取的页面元素如下图:

导入命名空间:

import scrapy

定义spider:

class homelink_selling_index_spider(scrapy.Spider):

    # 定义spider的名字,在调用spider进行crawling的时候会用到:
# scrapy crawl <spider.name>
name = "homelink_selling_index"
# 如果没有特别指定其他的url,spider会以start_urls中的链接为入口开始爬取
start_urls = ["http://bj.lianjia.com/ershoufang/pg1tt2/"] # parse是scrapy.Spider处理http response的默认入口
# parse会对start_urls里的所有链接挨个进行处理
def parse(self, response):
# 获取当前页面的房屋列表
#house_lis = response.css('.house-lst .info-panel')
house_lis = response.xpath('//ul[@class="house-lst"]/li/div[@class="info-panel"]')
# 把结果输出到文件(在命令行中房屋标题会因为编码原因显示为乱码)
with open("homelink.log", "wb") as f:
## 使用css selector进行操作
#average_price = response.css('.secondcon.fl li:nth-child(1)').css('.botline a::text').extract_first()
#f.write("Average Price: " + str(average_price) + "\r\n")
#yesterday_count = response.css('.secondcon.fl li:last-child').css('.botline strong::text').extract_first()
#f.write("Yesterday Count: " + str(yesterday_count) + "\r\n")
#for house_li in house_lis:
# link = house_li.css('a::attr("href")').extract_first() # 获取房屋的链接地址
# title = house_li.css('a::text').extract_first() # 获取房屋的标题
# price = house_li.css('.price .num::text').extract_first() # 获取房屋的价格 # 使用xpath selector进行操作
average_price = response.xpath('//div[@class="secondcon fl"]//li[1]/span[@class="botline"]//a/text()').extract_first()
f.write("Average Price: " + str(average_price) + "\r\n")
yesterday_count = response.xpath('//div[@class="secondcon fl"]//li[last()]//span[@class="botline"]/strong/text()').extract_first()
f.write("Yesterday Count: " + str(yesterday_count) + "\r\n")
for house_li in house_lis:
link = house_li.xpath('.//a/@href').extract_first() # 注意这里xpath的语法,前面要加上".",否则会从文档根节点而不是当前节点为起点开始查询
title = house_li.xpath('.//a/text()').extract_first()
price = house_li.xpath('.//div[@class="price"]/span[@class="num"]/text()').extract_first()
f.write("Title: {0}\tPrice:{1}\r\n\tLink: {2}\r\n".format(title.encode('utf-8'), price, link))

第三步:查看结果

Average Price: 44341
Yesterday Count: 33216
Title: 万科假日风景全明格局 南北精装三居 满五唯一 Price:660
Link: http://bj.lianjia.com/ershoufang/xxx.html
Title: 南北通透精装三居 免税带车位 前后对花园 有钥匙 Price:910
Link: http://bj.lianjia.com/ershoufang/xxx.html
Title: 西直门 时代之光名苑 西南四居 满五唯一 诚心出售 Price:1200
Link: http://bj.lianjia.com/ershoufang/xxx.html
......

结语:

通过上面的三步,我们可以对网页元素进行简单的爬取操作了。但是这里还没有真正利用好Scrapy提供给我们的很多方便、强大的功能,比如: ItemLoader, Pipeline等。这些操作会在后续的文章中继续介绍。

Scrapy学习系列(一):网页元素查询CSS Selector和XPath Selector的更多相关文章

  1. HTML学习笔记——标准网页设计+使用CSS、Javascript

    一.标准网页设计 1.标准网页概述: 标准网页设计要遵循,内容与表现相分离.   内容 + 表现 = 页面  ---  即 :XHTML + CSS = PAGE 内容与变现相分离,也就是内容使用HT ...

  2. Entity Framework 学习系列(5) - EF 相关查询

    目录 写在前面 一.使用Stopwatch 查询执行效率 二.简单查询 1.Linq写法: 2.Lambda表达式写法: 三.条件查询 1.Linq 写法 2.lambda 写法 四.聚合函数 1.L ...

  3. Scrapy学习-16-动态网页技术

    Selenium浏览器自动化测试框架 简介 Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 支持的浏览器包括IE(7, 8, ...

  4. WPF学习系列之六 (元素绑定)

    元素绑定 简单地说,数据绑定是一种关系,该关系告诉WPF从一个源对象提取一些信息,并使用这些信息设置目标对象的属性.目标属性总是依赖属性,并且通常位于WPF元素中. 一.将元素绑定到一起 <Wi ...

  5. selenium3+python3自动化测试学习之网页元素定位

    selenium基础实战之定位网页元素技巧 selenium定位网页元素 find_element_by_id,find_element_by_name,find_element_by_class_n ...

  6. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

  7. Oracle学习系列3

    Oracle学习系列3 ************************************************************************************ 多表查 ...

  8. 第49天学习打卡(CSS 层次选择器 结构伪类选择器 属性选择器 美化网页元素 盒子模型)

    推荐书籍:码出高效: Java 开发手册 2.2 层次选择器 idea里代码规范是按:ctrl +alt+L快捷键 注释快捷键:ctrl+/ 1.后代选择器:在某个元素的后面 祖爷爷 爷爷 爸爸 你 ...

  9. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

随机推荐

  1. HTML5音频

    <audio>用来播放声音文件. 案例1: <!DOCTYPE html><html><head lang="en"> <me ...

  2. 织梦dedecms5.7后台进去就卡死解决方法

    症状:进入dede后台点击菜单后,浏览器进入假死状态要等好久才能反应过来. 解决方式:1.打开后台目录dede/templets/ 2.找到index_body.htm文件中的第25行至第35行部分屏 ...

  3. python中的 json 模块使用

    (1)python 中生成 json 字符串: import json data = dict(ret=0, msg="Welcome, Login success!") json ...

  4. Android平台之不预览获取照相机预览数据帧及精确时间截

    在android平台上要获取预览数据帧是一件极其容易的事儿,但要获取每帧数据对应的时间截并不那么容易,网络上关于这方面的资料也比较少.之所以要获取时间截,是因为某些情况下需要加入精确时间轴才能解决问题 ...

  5. VMware网络配置 实现与物理机互访

    虚拟机和物理主机互访,两台机器可以互访并可以被局域网内其他机器访问,可以ping通并可以访问网站. 这几天正好有空搞个虚拟机,并装了不同系统,以备不同部署环境需要.明明是搞编程的,却不得不学各种知识, ...

  6. Loadrunner根据PV量来确定需要进行压测的并发量

    在实际做压力测试的过程中,我们有时不知道用怎样的并发量比较好,下面是几个用PV量去确定并发量的公式,这个在我们公司是比较适用的,大家可以根据自己的业务进行运算. 方法一:这个方法是我在网上查到的80- ...

  7. jquery checkbox 全选、取消全选

    $("#checkall").click(function(){ $("input[name='uid']").prop("checked" ...

  8. Cocos2d-x程序Windows下VC中文乱码的解决(用MultiByteToWideChar进行转换,VC2010有非常厉害的execution_character_set)

    Cocos2d-x默认字符串常量编码都是UTF8的,而Windows中的VC默认都是跟系统相同,比如简体Windows是GB2312或者GBK.繁体就是BIG5编码.而我们大多数中国人用VC编译出来的 ...

  9. Powershell --在线学习

    介绍和安装 自定义控制台 快速编辑模式和标准模式 快捷键 管道和重定向 Powershell交互式 数学运算 执行外部命令 命令集 别名 通过函数扩展别名 执行文件和脚本 Powershell变量 定 ...

  10. 程序减肥,strip,eu-strip 及其符号表

    程序减肥,strip,eu-strip 及其符号表 我们要给我们生成的可执行文件和DSO瘦身,因为这样可以节省更多的磁盘空间,所以我们移除了debug信息,移除了符号表信息,同时我们还希望万一出事了, ...