当前位置: 首页 > 后端技术 > Python

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

时间:2023-03-26 01:31:15 Python

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结选择器分别抓取京东商品信息。今天,我就为大家总结一下这四种选择器,让大家对Python选择器有更深入的了解和熟悉。1、正则表达式正则表达式为我们提供了抓取数据的捷径。虽然这个正则表达式更容易适应未来的变化,但它很难构造并且可读性较差。爬取京东时,正则表达式如下图所示:利用正则表达式实现目标信息的精准采集另外,我们都知道网页经常变化,导致网页布局会出现一些细微的变化,这个时候也会让之前写的正则表达式无法满足要求,也不太好调试。当需要匹配的内容较多时,使用正则表达式提取目标信息会减慢程序的运行速度,消耗更多的内存。2.BeautifulSoupBeautifulSoup是一个非常流行的Python模块。该模块可以解析网页并为定位内容提供方便的接口。该模块可以通过“pipinstallbeautifulsoup4”安装。使用BeautifulSoup提取目标信息使用BeautifulSoup的第一步是将下载的HTML内容解析为soup文档。由于大多数网页不是格式良好的HTML,BeautifulSoup需要确定实际的格式。BeautifulSoup正确解析缺失的引号和结束标签,还添加了和标签,使其成为一个完整的HTML文档。通常使用find()和find_all()方法来定位我们需要的元素。如果想了解BeautifulSoup的所有方法和参数,可以查看BeautifulSoup的官方文档。BeautifulSoup虽然在代码理解上比正则表达式复杂,但是更容易构造和理解。3、LxmlLxml模块是用C语言编写的,解析速度比BeautiflSoup快,安装过程也比较复杂,这里不再赘述。XPath使用路径表达式来选择XML文档中的节点。通过以下路径或步骤选择节点。XPath使用lxml模块的第一步和BeautifulSoup一样,都是把可能不合法的HTML解析成统一的格式。虽然lxml可以正确解析属性两边缺失的引号并关闭标签,但是这个模块并没有添加额外的和标签。在线复制XPath表达式可以很方便的复制XPath表达式。但是这种方法得到的XPath表达式在程序中一般是不能用的,读起来也太长了。所以XPath表达式一般还是要自己搞定。第四,CSSCSS选择器表示用于选择元素的模式。BeautifulSoup将CSS选择器的语法与自己方便的API集成在一起。在网络爬虫的开发过程中,对于熟悉CSS选择器语法的人来说,使用CSS选择器是一种非常方便的方法。CSS选择器以下是一些常用选择器的示例。选择所有标签:*选择标签:a选择所有class="link"的元素:.link选择class="link"的标签:a.link选择标签:aJhome选择所有父元素为标签的子标签:a>span选择标签内的所有标签:aspan选择所有title属性为"的标签Home">Label:a[title=Home]五、性能比较lxml和正则表达式模块是用C语言编写的,而BeautifulSoup是用纯Python编写的。下表总结了每种抓取方法的优缺点。注意到这一点相对困难。在内部,lxml实际上将CSS选择器转换为等效的XPath选择器。6.总结如果你的爬虫瓶颈是下载网页,而不是提取数据,那么使用较慢的方法(比如BeautifulSoup)不是问题。如果只需要抓取少量数据,又想避免额外的依赖,那么正则表达式可能更合适。不过一般情况下,lxml是取数据的最佳选择,因为这种方式快速且健壮,而正则表达式和BeautifulSoup只是在某些特定场景下才有用。如果想深入了解Python网络爬虫和数据挖掘,可以去专业网站:http://pdcfighting.com/