Python内使用parsel之css选择器

parsel

parsel 比 lxml 功能强大,它内部不光集成有xpath语法,也集成了css和re语法,相比而言,css与re通用性更强,它俩的性能完全不输xpath,特别是re,速度更快,难度也高!

css与xpath专门处理标记语言格式内容,如:XML或HTML等,但不能直接处理response,必须通过parsel 或 lxml 内的特别方法把字符形式的response转换成html 形式的编码。

css语法

#发送清求,获得响应
response = httpx.get(url,headers).text
#把响应体转成html 格式.
html = parsel.Selector(response)
#定位内容,获取所有div标鉴内容
contend = html.css(‘div’).getall()

当定位到内容时,获取内容有两个方法。

a,get()
get()方法获取第一个符合的内容,当符合内容有多个时,只返回第一个,并且以字符串形式返回标签内容。
比如,要获取第一个< p >标签
p = html.css(‘p’).get()
返回第一个< P >标签包含所有内容,包括< P > < /P >和它俩之间所有内容。

b,getall()
getall()方法返回所有的符合内容,以列表形式返回所有标签内容。
例如,要获取所有< a >标签
a = html.css(‘a’).getall()
返回列表,包含所有< a >标签以及< /a >标签内所有内容。

解析标签内容

a,::text
::text 获取标签内容的文本。比如,获取第一个< P >标签的文本内容。
p = html.css(‘p::text’).get()
只返回< P >标签的文本内容。

b,::attr()
::attr()获取标签属性内容。
比如,获取第一个< a >标签的’href’内容.
href = html.css('a::attr(‘href’)).get()
只返回< a >标签内’href’连接内容。

css选择器
parsel的出现,实现了在python中使用css选择器的可能,这包括标签选择器,类选择器,id选择器,复合选择器,伪选择器等等,具体css选择器用法,请参考其他的相关内容,我们下面只简聊在python中的用法。

a,标签选择器
div = html.css(‘div’).getall()
返回所有< div >标签。

b,类选择器(用 . 表示)
div = html.css(‘div.contend’).get()
返回class类属性为contend的div标签。

c,id选择器(用#表示)
p = html.css(‘p#contend::text’).get()
返回id为contend的< p >的文本内容。

其它选择器用法请参考css的具体用法

### Python Parsel使用教程 #### 安装Parsel库 为了能够顺利使用Parsel库,在项目环境中安装此库是必要的。可以通过pip命令轻松完成这一操作。 ```bash pip install parsel ``` #### 创建Selector对象 创建`Selector`对象是使用Parsel的第一步,这一步骤决定了后续能否成功地从HTML或者XML文档中抽取所需信息。通过传递字符串形式的HTML内容给`Selector`类即可实现这一点[^1]。 ```python from parsel import Selector html_text = '<html><body><h1>Hello, world!</h1></body></html>' selector = Selector(text=html_text) ``` #### 使用XPath和CSS选择器提取数据 一旦拥有了`Selector`对象之后,就可以利用XPath或CSS选择器语法从中获取特定部分的内容了。这两种方法各有千秋,可以根据个人喜好以及具体场景灵活选用。 - **XPath**: 提供了一种强大而灵活的方式来定位DOM树中的节点。 ```python title_xpath = selector.xpath('//h1/text()').get() ``` - **CSS Selectors**: 更加直观易懂,特别适合于那些熟悉前端开发的人士。 ```python title_css = selector.css('h1::text').get() ``` 上述两行代码均用于抓取页面标题文字“Hello, world!”[^3]。 #### 结合正则表达式进行更复杂的匹配 当面对更加复杂的需求时,比如需要根据某些模式来筛选目标元素,则可以借助于正则表达式的威力。下面的例子展示了怎样先用CSS选取一组标签再进一步过滤其中符合条件者[^5]。 ```python import re links = selector.css('.item-0 a::attr(href)').re(r'link.*') print(links) ``` 这段脚本会输出所有class属性中含有`item-0`并且链接地址含有`link`字样的超链接列表。 #### 实际应用场景下的综合运用 掌握了基本的操作技巧以后,便可以在真实世界里构建高效的网络爬虫程序了。例如针对某个电商网站的商品详情页编写一段简单的爬虫逻辑,从而批量收集商品名称、价格等重要参数[^4]。 ```python def parse_product_page(html_content): sel = Selector(text=html_content) product_name = sel.xpath("//div[@id='productTitle']/span/text()").get().strip() price = sel.xpath("//span[@id='priceblock_ourprice']/text()").get().replace('$', '').strip() return { 'name': product_name, 'price': float(price), } ``` 该函数接收网页源码作为输入并返回包含产品名与售价在内的字典结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值