首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BeatifulSoup,Xpath,CSS 选择器的性能比较

今天来讲讲关于网页解析器的介绍,一般我们将网页下载下来后,就要提取里面的自己想要的内容了,python库自带的正则表达式re库虽然能完成这个任务,但是对于一些网页结构比较复杂点的网站,使用re库构造正则表达式就变得很费力了,所以需要引入第三方库。

目前,市面上常见的网页解析器除了re,还有BeautifulSoup库,lxml库(Xpath, CSS),今天我们来比较一下这两个第三方库的性能。

代码如下所示:

importrequests

frombs4importBeautifulSoup

fromparselimportSelector

fromlxmlimportetree

importtime

defget_html(url):

try:

r = requests.get(url)

r.raise_for_status()

r.encoding = r.apparent_encoding

returnr.text

except:

return""

defbs_parse(html):

results1 = []

soup = BeautifulSoup(html,'html.parser')

a = soup.find_all('a')

foriina:

try:

href = i.get('href')# 等同于 href = i.attrs['href']

results1.append(href[])# 表示匹配 sh 或者 sz 加6位数字的内容

except:

continue

defbs_parse_with_lxml(html):

results1 = []

soup = BeautifulSoup(html,'lxml')

a = soup.find_all('a')

foriina:

try:

href = i.get('href')# 等同于 href = i.attrs['href']

results1.append(href[])# 表示匹配 sh 或者 sz 加6位数字的内容

except:

continue

defxpath_parse(html):

s = Selector(text=html)

results2= s.xpath('//a[@href]/text()').extract()

defxpath_etree(html):

s = etree.HTML(html)

results2= s.xpath('//a[@href]/text()')

defcss_parse(html):

s = Selector(text=html)

results3= s.css('a::attr(href)').extract()

defmain():

url ='http://quote.eastmoney.com/stocklist.html'

html = get_html(url)

num_iterations =100# 每个爬虫测试100次

function_called = [('bs', bs_parse), ('bs_lxml', bs_parse_with_lxml),

('xpath', xpath_parse),('xpath_etree', xpath_etree), ('css', css_parse)]

forname, funcinfunction_called:

start_time = time.time()

foriinrange(num_iterations):

func(html)

end_time = time.time()

print("=================================================================")

print('%s: %.2f seconds'% (name, end_time - start_time))

main()

运行结果如下:

下面进行总结:

Xpath和CSS都是使用lxml库,在使用Selector进行网页解析的情况下,CSS比Xpath稍微快一点点,但是如果Xpath引入lxml的etree进行解析,则比CSS快,不过Xpath定位元素比CSS容易好多,个人偏向于使用Xpath。

BeautifulSoup库是最慢的,因为bs也支持lxml,在bs中使用lxml能大幅提高解析速度,但是和Xpath和CSS差距还是很大。

lxml库和re库的速度相当,有些地方也还是要使用到re库的。

所以,在日常解析网页中,一般都是以xpath为主,re为辅。

下面给出Xpath和CSS的一张比较图。

关于Xpath和CSS语法就不在这详细介绍了,感兴趣的小伙伴可以在网络上搜下。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180512G01PQN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券