利用不同工具实现网络爬虫

XPath

XPathXML Path)是一种查询语言,它能在XMLHTML的树状结构中寻找结点。形象一点来说,XPath就是一种根据“地址”来“找人”的语言。(使用C语言开发)

 为什么要用XPath

        用正则表达式来提取信息,针对给定较短的文本比较容易且适宜,但是一旦内容多起来,正则的效率会大大降低,不仅需要构造正则表达式,还需要分析内容结构,寻找的内容越复杂,构造正则表达式所需要花费的时间也就越多。

        而XPath却不一样,我们主要从网页爬取数据,而XPath针对的就是HTML,所以用XPathHTML源代码中提取信息可以大大提高效率。

安装库

xlml库 

pip install lxml

parsel 库

pip install parsel

对比 

  1. lxml:它是一个功能强大的用于处理XML和HTML的库,在Python中使用广泛。它提供了一个快速而易于使用的API,用于处理XML和HTML数据。当使用etree.HTML(html)创建的是一个HTML树,可以使用XPath或CSS选择器从HTML树中提取数据。

  2. parsel:它是一个库,提供了一个简单的API,使用XPath或CSS选择器从HTML和XML中提取数据。当使用parsel.Selector(html)时,即创建了一个Selector对象,可以直接从HTML内容中使用XPath或CSS选择器提取数据。

总结

lxmlparsel都可以用于网页抓取,但它们有不同的API和功能,用于从HTML中提取数据。lxml是一个更通用的XML/HTML处理库,而parsel专门用于使用选择器提取数据。

语法

细节较多,可以参考菜鸟教程的XPath教程

注意“//”与“/”的区别

“/”是从<html>根标签查找,开头一定是html标签,即 /html/body/...

“//”是从全文查找,开头不一定是html标签

XPath 教程 | 菜鸟教程 (runoob.com)

案例

from lxml import etree
import requests
html = requests.get("http://exercise.kingname.info/exercise_bs_1.html").content.decode()

selector = etree.HTML(html)

content = seletor.xpath('//div[@class="useful u"]/ul/li/text()')

for item in content:
    print(item)

import parsel 

selector = parsel.Selector(html)

结果


BeautifulSoup4

简介

Beautiful Soup4BS4)是Python的一个第三方库,用来从HTMLXML中提取数据。

Beautiful Soup4在某些方面比XPath易懂,但是不如XPath简洁,而且由于它是使用Python开发的,因此速度比XPath慢。

安装

pip install beautifulsoup4

语法 

使用Beautiful Soup4提取HTML内容,一般要经过以下两步。

处理源代码生成BeautifulSoup对象。

使用find_all()或者find()来查找内容。

具体语法:​​​​​​Beautiful Soup 教程 (w3schools.cn)  或Beautiful Soup 4.2.0 文档 — Beautiful Soup 4.2.0 documentation (crummy.com)

案例

from bs4 import BeautifulSoup
import requests
html = requests.get("http://exercise.kingname.info/exercise_bs_1.html").content.decode()
soup = BeautifulSoup(html, 'lxml')
info = soup.find(class_='test')
print('使用find方法,返回的对象类型为'.format(type(info)) )
print(info.string)

结果 

网页源代码

<html>
<head>
<title>测试</title>
</head>
<body>
<div class="useful">
<ul>
<li class="info">我需要的信息1</li>
<li class="test">我需要的信息2</li>
<li class="iamstrange">我需要的信息3</li>
</ul>
</div>
<div class="useless">
<ul>
<li class="info">垃圾1</li>
<li class="info">垃圾2</li>
</ul>
</div>
</body>
</html>

通过以上工具对内容进行过滤后,即可将想要的数据保存在文件或数据库中,进行可视化或其他操作

保存到文件可以参考python读写文件操作-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值