如何自动从网页上提取数据_python从网页中提取数据

如何自动从网页上提取数据_python从网页中提取数据对于爬虫爬取到的网页信息,如何从其中获取我们需要的信息是一个非常重要的部分。而使用正则表达式则会显得非常麻烦,而且容易出错,幸好,python提供了很多解析库,例如lxml、beautifulsoup、pyquery、parsel等等,我们可以从中选取一种或几种来使用。 注意,使用解析库并不能直接获

  对于爬虫爬取到的网页信息,如何从其中获取我们需要的信息是一个非常重要的部分。而使用正则表达式则会显得非常麻烦,而且容易出错,幸好,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=' | ')

    如何自动从网页上提取数据_python从网页中提取数据

  上述第一句代码,对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

(0)
编程小号编程小号
上一篇 2023-09-05
下一篇 2023-09-05

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注