python写爬虫2-数据抓取的三种方式
常用抽取网页数据的方式有三种:正则表达式、Beautiful Soup、lxml
1.正则表达式
正则表达式有个很大的缺点是难以构造、可读性差、不易适用未来网页的变化。写一段伪代码:
import re
url = 'http://xxxx.com/sdffs'
html = download(url)
re.findall('正则表达式', html)
2.Beautiful Soup
这是一个非常流行的python模块。安装命令如下:
pip install beautifulsoup4
使用此模块的第一步是将已下载的html内容解析为soup文档。因许多html网页格式不规范,Beautiful Soup可对其进行确定,将其调整为规范的html文件。
3.Lxml
Lxml是基于libxml2这一XML解析库的python封装。该模块使用c语言编写,解析速度比Beautiful Soup更快。
安装命令如下:
pip install lxml
pip install cssselect
如下代码,从html中获取class=country的ul标签下,li标签id=a的文本,获取li标签class=b的文本
4.三种方式的比较
抓取方法 | 性能 | 使用难度 | 安装难度 |
---|---|---|---|
正则表达式 | 快 | 困难 | 简单(内置模块) |
Beautiful Soup | 慢 | 简单 | 简单(纯python) |
Lxml | 快 | 简单 | 相对困难 |
通常,lxml是抓取数据最好的选择,因为该方法既快速又健壮,而正则和Beautiful Soup只在某些特定场景下用。