spider【第四篇】数据的提取方法

数据的分类

我们知道,成功发出请求并获取响应后,这时候就要从数据中提取目标数据了。

结构化数据:json,xml等
    处理方式:直接转化为python类型
非结构化数据:HTML
    处理方式:正则表达式、xpath

lxml

1. 为什么要学习lxml

lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息

2.什么是xpath

XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。

3.html和xml的区别

但是语法基本类似,都有节点、属性、值和各个节点的层次关系

4.xpath中节点选择的工具

xpath和css有点类似,但是语法不同

Chrome插件 XPath Helper

Firefox插件 XPath Checker

W3School官方文档:http://www.w3school.com.cn/xpath/index.asp

from lxml import etree
text = ''' <div> <ul> 
        <li class="item-1"><a>first item</a></li> 
        <li class="item-1"><a href="link2.html">second item</a></li> 
        <li class="item-inactive"><a href="link3.html">third item</a></li> 
        <li class="item-1"><a href="link4.html">fourth item</a></li> 
        <li class="item-0"><a href="link5.html">fifth item</a> 
        </ul> </div> '''

html = etree.HTML(text)

li_list = html.xpath("//li[@class='item-1']")
print(li_list)
示例

BeautifulSoup

beautifulsoup性能比lxml差,但是语法简单

官方文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

from scripts.etherscan.etherscan_save import ret_soup, insert_csv


def item_handle(tr_list):
    '处理BeautifulSoup的trlist'
    arr = list()
    target = list()

    for tr in tr_list:
        td_list = tr.find_all('td')
        tmp_list = list()

        for td in td_list:

            td_text = td.text.strip('')

            if ',' in td_text:
                td_text = td_text.replace(',', '')

            tmp_list.append(td_text)

        # 处理完一行,新增到arr  target
        arr.append(tmp_list)

    if len(arr) > 0:
        try:
            print(arr)
        except Exception as e:
            print(str(e))


# url = 'https://ip.seofangfa.com/'
url = 'http://www.66ip.cn/areaindex_33/1.html'
soup = ret_soup(url)
tr_list = soup.find_all(name='tr')[2:]  # .find(name='tbody') # .find_all(name='tr')[1:]
print(tr_list)
item_handle(tr_list)
示例

 

转载于:https://www.cnblogs.com/hyit/articles/10686339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值