您当前的位置: 首页 >  Python

Bulut0907

暂无认证

  • 4浏览

    0关注

    346博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python scrapy的reponse数据解析

Bulut0907 发布时间:2020-11-16 12:15:05 ,浏览量:4

文章目录
  • 1. unicode二进制转UTF-8字符
  • 2. Selector
    • 2.1 selector的构建
    • 2.2 xpath
      • 2.2.1 extract()
      • 2.2.2 text()
      • 2.2.3 基于`@属性`过滤
      • 2.2.4 获取`@属性`的值
    • 2.3 re

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内容如下:


 
  
  Example website
 
 
  
   Name: My image 1
   Name: My image 1
   Name: My image 2
   Name: My image 2
  
 

2.2.1 extract()

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

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

结果如下:

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

可以看到把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: (.+?)')
for content in contents:
    print(content)

结果如下:

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

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

关注
打赏
1664501120
查看更多评论
立即登录/注册

微信扫码登录

0.0421s