js提取指定网站内容(parsel集XPath和pyquery为一体,可以灵活使用两者的表达式 )

优采云 发布时间: 2022-01-16 07:22

  js提取指定网站内容(parsel集XPath和pyquery为一体,可以灵活使用两者的表达式

)

  parsel集成了XPath和pyquery,可以灵活使用这两种表达式。

  安装

  pip install parsel

  了解html解析库

  之前学过pyquery和XPath,爬虫的html解析库,概念是一样的,不外乎:

  在系统学习python爬虫的过程中,如果这个概念不清楚,对后续学习会有很大的阻力。之所以一定要学parsel库,是因为想学好python爬虫,必须学习scrapy爬虫框架,而parsel是框架的基础。

  解析解析

  from parsel import Selector

html = '''hello, parsel

hello, xpath

'''

selector = Selector(text=html)

items_css = selector.css('h1')

items_xpath = selector.xpath('//h1')

  在parsel中选择节点,css和xpath方法效果一样。其实底层的css方法也是XPath方法。就效果而言,两者没有区别。 Parsel 只提供了一种灵活的节点选择方式供我们选择。 .

  两种选择节点的方法返回的SelectorList是一个可迭代对象,可以通过遍历来操作。

  items_css = selector.css('h1')

items_xpath = selector.xpath('//h1')

for item in items_css:

print(item)

for item in items_xpath:

print(item)

>>>

  两次遍历的结果相同,数据收录相同的内容。

  提取文本

  from parsel import Selector

"""

parsel集pyquery 和XPath一体,支持使用css选择器和XPath表达式

"""

html = '''

hello, parsel

hello, xpath

锅大虾的自学网站

百度

网易

'''

selector = Selector(text=html)

items_css = selector.css('.dv span')

items_xpath = selector.xpath('//div[@class="dv"]/span')

print(items_css.getall())

print(items_css.get())

>>>

['锅大虾的自学网站', '百度', '网易']

锅大虾的自学网站

  SelectorList 有两种提取节点的方法,get 和 getall。结合上面的例子,get方法返回SelectorList的第一个节点对象,getall返回SelectorList的所有节点。

  print(type(items_css.getall()))

print(type(items_css.get()))

>>>

  经过测试,getall返回一个列表,get返回一个字符串。

  只使用get和getall,只提取节点,可以使用XPath方法提取文本。

  items_css = selector.css('.dv span')

items_xpath = selector.xpath('//div[@class="dv"]/span')

for item in items_css:

text = item.xpath('.//text()').get()

print(text)

>>>

锅大虾的自学网站

百度

网易

  你也可以使用getall直接从节点选择中提取返回列表,不用遍历,然后遍历处理:

  xpath_items = selector.xpath('//div[@class="dv"]/span/a/text()').getall()

print(xpath_items)

>>>

['锅大虾的自学网站', '百度', '网易']

  当然也可以先提取文本所在的节点,然后遍历提取:

  for item in items_css:

text = item.xpath('.//text()').get()

print(text)

>>>

锅大虾的自学网站

百度

网易

  # 提取属性

attr = selector.css('.dv span a::attr(href)').getall()

for a in attr:

print(a)

# 这个方法和上面的是等效的,parsel两种提取的方法

attr = selector.xpath('//div[@class="dv"]/span/a/@href').getall()

print(attr)

>>>

https://nodepro.cn

https://baidu.com

https://163.com

['https://nodepro.cn', 'https://baidu.com', 'https://163.com']

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线