专栏首页Python小屋Python爬虫扩展库scrapy选择器用法入门(一)

Python爬虫扩展库scrapy选择器用法入门(一)

关于BeutifulSoup4的用法入门请参考Python爬虫扩展库BeautifulSoup4用法精要,scrapy爬虫案例请参考Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文,爬虫原理请参考Python不使用scrapy框架而编写的网页爬虫程序

本文代码运行环境为Python 3.6.1+scrapy 1.3.0。

>>> import scrapy

# 测试样本 >>> 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 <br /><img src='image1_thumb.jpg' /></a> <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a> <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a> <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a> <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a> <a href='test.html'>This is a test.</a> </div> </body> </html> '''

# 创建选择器对象 >>> sel = scrapy.selector.Selector(text=html)

# 查看title标签 >>> sel.xpath('//title').extract() ['<title>Example website</title>'] # 查看标签title的文本 >>> sel.xpath('//title/text()').extract() ['Example website'] # 使用等价的CSS选择器 >>> sel.css('title::text').extract() ['Example website']

# 查看所有href和src链接 >>> sel.xpath('//@href').extract() ['http://example.com/', 'image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html', 'test.html'] >>> sel.xpath('//@src').extract() ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg']

# 查看base标签中的链接地址 >>> sel.xpath('//base/@href').extract() ['http://example.com/'] >>> sel.css('base::attr(href)').extract() ['http://example.com/']

# 查看所有标签a >>> sel.xpath('//a').extract() ['<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="image3.html">Name: My image 3 <br><img src="image3_thumb.jpg"></a>', '<a href="image4.html">Name: My image 4 <br><img src="image4_thumb.jpg"></a>', '<a href="image5.html">Name: My image 5 <br><img src="image5_thumb.jpg"></a>', '<a href="test.html">This is a test.</a>']

# 要求标签a的href属性中含有image字符串 >>> sel.xpath('//a[contains(@href, "image")]').extract() ['<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="image3.html">Name: My image 3 <br><img src="image3_thumb.jpg"></a>', '<a href="image4.html">Name: My image 4 <br><img src="image4_thumb.jpg"></a>', '<a href="image5.html">Name: My image 5 <br><img src="image5_thumb.jpg"></a>']

# 查看符合条件的标签a的文本 >>> sel.xpath('//a[contains(@href, "image")]/text()').extract() ['Name: My image 1 ', 'Name: My image 2 ', 'Name: My image 3 ', 'Name: My image 4 ', 'Name: My image 5 '] # 使用正则表达式 >>> sel.xpath('//a[contains(@href, "image")]/text()').re('Name:\s*(.*)') ['My image 1 ', 'My image 2 ', 'My image 3 ', 'My image 4 ', 'My image 5 ']

>>> sel.xpath('//a[contains(@href, "image")]/@href').extract() ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']

>>> sel.xpath('//a/@href').extract() ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html', 'test.html']

>>> sel.css('a[href*=image] ::attr(href)').extract() ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] >>> sel.css('a[href*=image] img::attr(src)').extract() ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg']

>>> sel.xpath('//img/@src').extract() ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg'] >>> sel.xpath('//a[contains(@href, "image")]/img/@src').extract() ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg']

# href属性包含image1的a标签中img标签的src属性值

>>> sel.xpath('//a[contains(@href, "image1")]/img/@src').extract() ['image1_thumb.jpg']

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python使用更相减损术计算两个整数的最大公约数

    更相减损术是《九章算术》中给出的一种用于约分的方法,也可以用来计算最大公约数,其步骤为:

    Python小屋屋主
  • 使用with关键字让你的Python代码更加Pythonic

    首先解释一下上一篇文章Python科学计算扩展库numpy中的广播运算中最后的小题目,该题目答案是一个元组(True, 5),原因在于Python中的等号=虽然...

    Python小屋屋主
  • Python编程常见问题与解答

    答:一般来说,Python代码的运行速度比C语言的慢很多,但是如果充分运用内置函数、标准库对象和函数式编程模式的话,运行速度会提高很多,可以接近C语言。

    Python小屋屋主
  • 使用docker镜像快速搭建prometheus+grafana监控告警

    请参考docker 官网 https://hub.docker.com/

    良人王
  • WPF效果第一百一十五篇之环形ListBox

    国庆长假已经过去了,上班已经持续二周了,状态刚调整过来;假期在老家帮父母掰玉米、种种小麦过的还算充实;前面一篇更新了关于自定义Panle的效果(WPF效果第一百...

    WPF程序员
  • kube-prometheus添加target

    参考 https://github.com/prometheus-operator/kube-prometheus#quickstart

    二狗不要跑
  • C# SqlSugar框架的学习使用(一)--SqlSugar简介及创建

    最近有个开发项目准备启动,由于要求的开发周期较短,所以准备用个C#的框架,原本最初考虑用成熟的EF框架,但是觉得那个框架也太重了,就在网上找找了别的,无意间发现...

    Vaccae
  • Java枚举类型使用

    在编程中,常常遇到多种类型、多种状态的情况,对于这种可以事先预知的业务我们常常有两种表示方法:

    付威
  • 【亲测有效】Win10家庭版Microsoft Edge页面出现乱码的两种解决方案及gpedit.msc命令无法使用的解决策略

    昨天在爬取电影的时候生成的表单打开result.html时,发现页面出现如下乱码: ? 第一种方法: 上网找了半天,网上的解决方案是这样的: 1.Win + R...

    Angel_Kitty
  • 将在使用的Linux系统做成Docker镜像

    1.选定制作成镜像的系统 2.打包静息痛(镜像) 系统进行格式转化并压缩,执行如下命令,生成一个镜像的centos7-base.tar的文件

    行 者

扫码关注云+社区

领取腾讯云代金券