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)
示例

 

posted @ 2019-04-10 21:44  沐风先生  阅读(518)  评论(0)    收藏  举报