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

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/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)

结果 

网页源代码



测试


  • 我需要的信息1
  • 我需要的信息2
  • 我需要的信息3
  • 垃圾1
  • 垃圾2

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

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

你可能感兴趣的:(爬虫)