learning scrapy笔记(三)

UR2M–基础抓取过程

每个网站都是不同的,对每个网站进行研究是不可避免的,尤其是遇到一些生僻的问题时,还需要去Scrapy的邮件列表咨询。因此我们需要熟悉Scrapy整个过程。Scrapy的基本过程,可以写成缩略语UR2M,见下图。
在这里插入图片描述

The URL

一切都是从url开始。你需要目标网站的URL。

请求和相应

我们在输出日志中,Scrapy自动为我们做了一些工作。我们输入一个地址,Scrapy做了一个GET请求,并得到一个成功响应值200。这说明网页信息已经成功加载,并可以使用了。

抓取对象

下一步是从响应文件中提取信息,输入到Item。因为这是个HTML文档,我们用XPath来做。我们以https://www.gumtree.com/为例子。首先来看一下网页:
在这里插入图片描述
页面上的信息很多,但大多数是关于版面的:logo、搜索框、按钮等等。从抓取的角度,它们不重要。我们关注的是,例如,列表的标题、地址、电话。它们对应着HTML里的元素,我们要在HTML中定位,将信息提取出来。先从标题开始。
在这里插入图片描述
在标题上右键点击,选择检查元素。在自动定位的HTML上再次右键点击,选择复制XPath。Chrome给的XPath总是很复杂,并且很容易失效。我们要对其进行简化。我们只取最后面的h1。这是因为从SEO的角度,每页HTML只有一个h1最好,事实上大多是网页只有一个h1,所以不用担心重复。
让我们看看h1标签行不行:

>>> response.xpath('//h1/text()').extract()
[u'set unique family well']

我们在h1后面加上text(),表示只提取h1标签里的文字。我们已经成功得到了title,但是再仔细看看,还能发现更简便的方法。
在这里插入图片描述
Gumtree为标签添加了属性,就是itemprop=name。所以XPath可以简化为//*[@itemprop=“name”][1]/text()。在XPath中,切记数组从1开始的,所以这里[]里面是1。
接下来看价格。价格在HTML中的位置如下:

<strong class="ad-price txt-xlarge txt-emphasis" itemprop="price">£334.39pw</strong>

我们又看到了itemprop="name"这个属性,XPath表达式为//*[@itemprop=“price”][1]/text()。验证一下:

>>> response.xpath('//*[@itemprop="price"][1]/text()').extract()
[u'\xa3334.39pw']

注意Unicode字符和价格。这说明要对数据进行清理。在这个例子中,我们用正则表达式提取数字和小数点。使用正则方法如下:

>>> response.xpath('//*[@itemprop="price"][1]/text()').re('[.0-9]+')
[u'334.39']

提取房屋描述的文字、房屋的地址也类似,如下:

//*[@itemprop="description"][1]/text()
//*[@itemtype="http://schema.org/Place"][1]/text()

相似的,抓取图片可以用//img[@itemprop=“image”][1]/@src。主要这里没使用text(),因为我们只想要图片的URL。
目前为止,使用的还只是HTML和XPath,接下来用Python来做一个项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值