数据的分类
我们知道,成功发出请求并获取响应后,这时候就要从数据中提取目标数据了。
结构化数据: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
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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)