对于爬虫爬取到的网页信息,如何从其中获取我们需要的信息是一个非常重要的部分。而使用正则表达式则会显得非常麻烦,而且容易出错,幸好,python提供了很多解析库,例如lxml、beautifulsoup、pyquery、parsel等等,我们可以从中选取一种或几种来使用。
注意,使用解析库并不能直接获取我们需要的信息,解析库只能对网页信息进行解析,然后再依靠选择器来定位html节点。选择器一般来使用XPath或者CSS
本文主要介绍parsel解析库,以及一部分简单的Xpath和CSS。
详细的XPath和CSS选择器请见以下两篇文章:
XPath:https://www.cnblogs.com/zhuohua/articles/16363015.html
CSS选择器:https://www.cnblogs.com/zhuohua/articles/16363017.html
parsel库的使用
1、介绍
parsel库可以解析HTML和XML,并支持XPath和CSS选择器,同时还融合了正则表达式的提取功能。非常灵活且强大。
2、初始化
一般来说,使用parsel库中的Selector类来声明一个对象,该类传入一个文档内容作为参数,返回经过解析后的selector对象,该对象可以使用XPath和CSS进行内容提取。
import requests from parsel import Selector html = requests.get('https://ssr1.scrape.center').text # 创建一个Selector对象,向其中传入html文档 selector = Selector(text=html)
3、XPath和CSS选择
# 使用xpath items2 = selector.xpath('//a[contains(@class, "name")]') print(len(items), type(items), items, sep=' | ')
# 使用css选择器 items = selector.css('.name') print(len(items), type(items), items, sep=' | ')
上述第一句代码,对selector对象调用XPath方法,‘//a[contains(@class, “name”)]‘表示获取对象中类型class=name的 a 标签,该方法返回一个列表,列表的对象名为SelectorList,该列表的元素就是selector对象,由一个一个selector对象组成,一个selector对象就代表获取到的一个符合XPath的标签。并且,也可以继续调用Xpath方法对selector对象进行选择。
下面的代码就是一个selector对象。
<Selector xpath="descendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), ' name ')]" data='<a data-v-7f856186="" href="/detail/1...'>
对于CSS选择器,其实其底层是依靠XPath实现的,就是将CSS选择器先转化为XPath,再进行节点提取,这没啥好说的。
4、提取文本
对于selectorList对象,可以用get()方法将其中的第一个selector转换为字符串(如果只有一个selector对象,就不存在第一个这种说法)。如果要将其中所有selector对象都转换为字符串,则需要用getall()方法。注意:返回的字符串不一定是文本,也可以是一个标签!这取决于selector对象是什么样的。
因为我们获取的对象中类型class=name的 a 标签得到的结果是一个列表,因此,我们选对列表进行遍历,遍历将得到一个selector对象,对selector对象再调用css选择‘.m-b-sm *::text‘,这会选择其中所有的class=”m-b-sm” 的标签的文本(即上图的“”霸王别姬 – Farewell My Concubine“”),并且返回的也是一个SelectorList对象(该SelectorList对象的selector对象是由纯文本转换的)然后在对这个SelectorList对象调用get()方法,将其中第一个selector对象转换为字符串并返回,因为我们css选择的时候就是选中的文本内容,所以返回的字符串也是文本。(如果只有一个selector对象,就不存在第一个这种说法)
for item in items2: text = item.css('.m-b-sm *::text').get() print(text)
5、提取属性
对于属性,同文本也是类似的,在Xpath或CSS选择器里表示要提取的属性即可返回包含selector对象(该对象有属性转换而成)的SelectorList对象,即便只有一个selector对象,返回的也是SelectorList对象。
然后调用get()或getall()方法,将selector对象转换为字符串即可。
最后附上完整代码,可以运行分析理解一下
import requests from parsel import Selector html = requests.get('https://ssr1.scrape.center').text # 创建一个Selector对象,向其中传入html文档 selector = Selector(text=html) print(type(selector),end='\n') # 使用css选择器 items = selector.css('.name') print(len(items), type(items[0]), items, sep=' | ') # 使用xpath items2 = selector.xpath('//a[contains(@class, "name")]') print(len(items), type(items), items, sep=' | ') print('-'*100) print(items2.get()) print('-'*100) for item in items2: text = item.css('.m-b-sm *::text') print(text) print(text.get())
今天的文章如何自动从网页上提取数据_python从网页中提取数据分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/46384.html