爬虫知识3:seletors选择器、Xpath、 BeautifulSoup使用案例

本文详细介绍了Scrapy中选择器的使用,包括seletors、XPath、CSS和BeautifulSoup。文章重点讲解了XPath的语法和各种操作,提供了多个示例,帮助读者理解和应用数据提取。此外,还提到了Scrapy shell交互测试网页代码的方法。
摘要由CSDN通过智能技术生成

   本文主要介绍了Scrapy常用的数据提取的方法,包括seletors、scrapy shell、xpath、css、BeautifulSoup的使用方法及案例。只要掌握xpath或者css任意一种即可。

1、seletors选择器

1)介绍

        Scrapy提取数据有自己的一套机制。它们被称作选择器(seletors),构建于lxml库之上,通过特定的XPath或者CSS表达式来等“选择” HTML文件中的某个部分。Selector有四个基本的方法,最常用的还是xpath:

  • XPath(query):传入Xpath表达式queery,返回该表达式对应的所有节点的selector list。Xpath是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

  • css(query):传入css表达式query,返回该表达式所对应的所有节点的selector list列表CSS是将HTML文档样式化的语言。选择器由它定义,并与特定的HTML元素的样式相关联。

  • re(): 根据传入的正则表达式对数据进行提取,返回Unicode字符串list列表

  • extract(): 序列化该节点为Unicode字符串并返回list

2)导入seletors

from scrapy.selector import Selector, HtmlXPathSelector

from scrapy.http import HtmlResponse

3)常用xpath使用方法:

常用语法:

  • /:根节点

  • //xxx/zzz:路径

  • //div:去全局的子孙中找所有的div元素

  • .//表示去当前对象的子孙中找

  • /xxx//div:去儿子对象中找xxx节点下所有的div元素

  • *:匹配任意节点元素

  • /html/body/div[1]:选取body下的第一个div节点

  • //div[@class="xxx"]:选取class属性为xxx的div节点

  • //@attr:获取attr对应的值

常用函数:

  • text():提取文本信息,//*[@class='xxx']/text()

  • position():选取第几个节点,//*[position()=1]

  • last():选取最后一个节点,//*[last()]

  • starts-with(@attr,substr):attr属性值开头substr的节点

  • contains(@attr,substr):attr属性值是否包含substr

运算符:

  • |:计算两个节点集合,比如//div|//li

  • 比较运算符=,!=,<=...,比如//price[text()>10]

  • 算数运算符:+,-,*,div,比如//price[text()+1]

  • 逻辑运算符:or,and,[@class='xxxx' or @class='yyyy']

4)xpath语法案例:以取a标签为案例,div、span等都相同

  • xpath('//a'):找到全局中所有的a标签

  • xpath('//a/text()  '):获取a标签的文本值

  • xpath('//a/span'):a标签对象儿子下的span标签

  • xpath('//a[2]'):a标签找到后,返回的是一个列表,[n]列表的n位置的值

  • xpath('//a[@id]'):找全局中属性为id的a标签

  • xpath('//a[@id="i1"]'):找全局中属性id为i1的a标签

  • xpath('//a/@id'):取a标签的id的属性值

  • xpath('//a[@href="link.html"][@id="i1"]'):两个[]代表双条件,需要href="link.html“,且id="i1"的a标签

  • xpath('//a[contains(@href, "link")]'):a标签的href需要包含"link"字符

  • xpath('//a[starts-with(@href, "link")]'):a标签的href需要以"link"开头

  • xpath('//a[re:test(@id, "i\d+")]'):正则表达式的写法,需要有re:test

  • xpath('//a[re:test(@id, "i\d+")]/@href').extract(),正则表达式的写法案例

  • xpath(.//)在当前基础上往下找,需要加“.”,比如用在for循环中

  • obj.extract()#列表中的每一个对象转化字符串==>返回一个列表

  • obj.extract_first() #列表中的每一个对象转化字符==>列表中的第一个元素

  • xpath('/html/body/ul/li/a/@href').extract():一层层去找标签

5)获取代码,需要在页面,右键-----检查元素---去看下html结构。

也可以直接选择自己想要的内容,通过copy---copy xpath直接获得源代码,去粘贴即可。

比如选取下面页面的肖申克救赎的信息:但一般这种路径都会特别长。

//*[@id="content&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值