【爬虫】4.Scrapy Selector提取数据

Selector对象

从页面中提取数据的核心技术是http文本解析,在python中常用的方式有两种

  • BeautifulSoup
    BeautifulSoup是非常流行的HTTP解析库,API简洁易用,但解析速度较慢。
  • lxml
    lxml是一套由C语言编写的xml解析库(libxml2),解析速度更快,API相对复杂。

Scrapy综合上述两个方式的优点,基于lxml库构建,并简化了API接口,在Scrapy中使用Selector对象提取页面中的数据,使用时先通过XPath或CSS选择器选中页面中要提取的数据,然后进行提取。

创建对象

from scrapy.selector import Selector

text = '''<html>
          <body>
                <h1>Hello World</h1>
                <h1>Hello Scrapy</h1>	
                <b>Hello python</b>
                <ul>
                    <li>C++</li>
                    <li>Java</li>
                    <li>Python</li>
                </ul>
          </body>		
          </html>	 '''
selector = Selector(text=text)
输出:<Selector xpath=None data='<html>\n          <body>\n             ...'>

选取数据

调用Selector对象的xpath方法或css方法(传入XPath或CSS选择器表达 式),可以选中文档中的某个或某些部分:

selector_list = selector.xpath('//h1')
输出:[<Selector xpath='//h1' data='<h1>Hello World</h1>'>, <Selector xpath='//h1' data='<h1>Hello Scrapy</h1>'>]
for i in selector_list:
    print(i.xpath('./text()'))
输出:[<Selector xpath='./text()' data='Hello World'>]
	 [<Selector xpath='./text()' data='Hello Scrapy'>]

xpath()和css()方法返回的是一个SelectorList对象,其中包含每个被选中部分对应的Selector对象,SelectorList支持列表接口,可使用for语句迭代访问其中的每一个Selector对象。SelectorList对象也有xpath和css方法,调用它们的行为是:以接收到的参数分别调用其中每一个Selector对象的xpath或css方法,并将所有结果收集到一个新的SelectorList对象返回给用户。

提取数据

调用Selector或SelectorLis对象的以下方法可将选中的内容提取:

  • extract() :返回选中内容的Unicode字符串
  • re() :使用正则表达式来选取内容
  • extract_first() (SelectorList专有)
  • re_first() (SelectorList专有)
sl = selector.xpath('//li/text()')
print(sl)
print(sl.extra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值