Python scrapy的reponse数据解析

1. unicode二进制转UTF-8字符

当我们爬虫`print(response.body)时,会出现无法阅读的字符,如下图所示:

unicode二进制从图中可以看出打印出来的字符内容为b'......'二进制这种格式的内容,这样的内容我们人类是看不懂的,且编码格式为utf-8

原因和原理:我们知道Python字符串是采用unicode来编码的,全世界各种语言(包含中文)的每一个字符都有唯一对应的一个字符编码,然后采用utf-8的编码方式,将字符编码转换成二进制格式储存在磁盘或在网络传输,所有就会出现我们上图的这种情况

解决和原理
解决的方法就是print(str(response.body, 'utf-8')), 将二进制格式的数据转换成utf-8格式的字符,这样我们人类就可以阅读理解了,如下图所示:
UTF-8字符

2. Selector

Selector的import

from scrapy.selector import Selector

2.1 selector的构建

selector = Selector(text = html_text)

其中html_text是str类型的html elements

2.2 xpath

这里我们测试使用网页的html内容如下:

<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html'>Name: My image 1</a>
   <a href='image1.html'>Name: My image 1</a>
   <a href='image2.html'>Name: My image 2</a>
   <a href='image2.html'>Name: My image 2</a>
  </div>
 </body>
</html>

2.2.1 extract()

我们先通过一个简单的例子来了解xpath

contents=selector.xpath("//div/a").extract()
for content in contents:
    print(content)

结果如下:

<a href="image1.html">Name: My image 1 <br><img src="image1_thumb.jpg"></a>
<a href="image1.html">Name: My image 1 <br><img src="image1_thumb.jpg"></a>
<a href="image2.html">Name: My image 2 <br><img src="image2_thumb.jpg"></a>
<a href="image2.html">Name: My image 2 <br><img src="image2_thumb.jpg"></a>

可以看到把div标签下的所有a标签都都找出来了,其中//表示任意起始位置,extract()将所有符合条件的标签都提取出来,形成list

2.2.2 text()

contents=selector.xpath("//div/a/text()").extract()
for content in contents:
    print(content)

结果如下:

Name: My image 1 
Name: My image 1 
Name: My image 2 
Name: My image 2

可以看到只获取了元素的内容,而没有标签了

2.2.3 基于@属性过滤

contents=selector.xpath("//div/a[@href='image1.html']/text()").extract()
for content in contents:
    print(content)

结果如下:

Name: My image 1 
Name: My image 1

可以看到只获取到了a标签下属性href等于image1.html的内容

2.2.4 获取@属性的值

contents=selector.xpath("//div/a/@href").extract()
for content in contents:
    print(content)

结果如下:

image1.html
image1.html
image2.html
image2.html

可以看到获取到了属性href的值

2.3 re

contents=selector.re('Name: (.+?)</a>')
for content in contents:
    print(content)

结果如下:

My image 1
My image 1
My image 2
My image 2

re将符合条件的多个数据以list返回

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy 是一个用于爬取网站数据Python 框架。它提供了一套易于使用且灵活的工具,可以帮助开发者快速高效地构建和管理爬虫程序。 Scrapy 的核心组件包括引擎(Engine)、调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)以及管道(Pipeline)。 1. 引擎(Engine)是 Scrapy 的核心,负责控制整个爬取流程,协调各个组件的工作。 2. 调度器(Scheduler)负责接收引擎发送过来的请求,并进行调度,将请求分发给下载器进行处理。 3. 下载器(Downloader)负责下载网页内容,并将下载得到的响应(Response)返回给引擎。 4. 爬虫(Spider)定义了爬取和解析网页的逻辑。开发者可以根据需要编写自定义的爬虫,通过定义起始URL和提取规则等来指导框架进行爬取工作。 5. 管道(Pipeline)负责处理从爬虫得到的数据,并进行清洗、持久化等操作。 使用 Scrapy 进行网页解析的一般流程如下: 1. 创建一个新的 Scrapy 项目:通过命令行工具或者命令 `scrapy startproject project_name` 创建一个新的 Scrapy 项目。 2. 创建爬虫:使用命令 `scrapy genspider spider_name website_domain` 创建一个爬虫,定义起始URL和解析规则。 3. 编写爬虫逻辑:在生成的爬虫文件中,编写爬取和解析网页的逻辑,包括提取数据和跟进链接等操作。 4. 配置项目设置:可以通过 `settings.py` 文件对项目进行设置,如设置下载延迟、用户代理等。 5. 运行爬虫:使用命令 `scrapy crawl spider_name` 运行爬虫,开始执行爬取任务。 6. 数据处理与存储:在管道中对从爬虫得到的数据进行处理,并进行数据持久化、清洗等操作。 以上是一个简单的介绍,Scrapy 还有更多的特性和功能,如中间件、下载器中间件、扩展等,开发者可以根据具体需求进行灵活使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值