用Python写爬虫工具现在已经是家常便饭了。每个人都希望写一个程序,从网上搜集一些信息做数据分析或者干点别的事情。我们知道,爬虫的原理无非就是下载目标网站的内容,存入内存。这时候它的内容其实就是一堆HTML,然后按照自己的想法解析HTML内容提取出想要的数据,所以今天我们就主要讲讲Python解析网页HTML内容的四种方法,各有千秋,适合不同的场合使用。首先,我们随机找了一个网站。这时,豆瓣网站在脑海中闪过。嗯,毕竟是一个用Python搭建的网站,所以还是拿来做个演示吧。我们找到了豆瓣的Python爬虫群的主页,大概是这样的。让我们使用浏览器开发者工具来查看HTML代码并找到我们想要的内容。我们想提取讨论组中帖子的标题和链接。通过分析,我们发现我们要的内容其实就在整个HTML代码的这个区域,所以我们只需要想办法把这个区域的内容取出来即可。现在开始写代码。1:正则表达式大法正则表达式通常用于检索和替换匹配某种模式的文本,所以我们可以利用这个原理来提取我们想要的信息。请参考下面的代码。在代码的第6行和第7行,需要手动指定header的内容,假装这个请求是浏览器请求,否则豆瓣会将其视为异常请求,返回HTTP418错误。在第7行,我们直接使用requests库的get方法进行请求。获取到内容后,我们需要进行编码格式的转换。这也是因为豆瓣的页面渲染机制。一般情况下,我们可以直接获取请求内容的内容。.Python模拟浏览器发起请求并解析内容代码:url='https://www.douban.com/group/491607/'headers={"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10.14;rv:71.0)Gecko/20100101Firefox/71.0"}response=requests.get(url=url,headers=headers).content.decode('utf-8')正则的好处就是写起来麻烦不好理解,但是匹配效率很高,但是现在现成的HTML内容解析库太多了,个人不建议手动使用正则表达式匹配内容,费时费力.主要解析代码:re_div=r'
'pattern=re.compile(re_div)content=re.findall(pattern,str(response))re_link=r'
(.*?)'mm=re.findall(re_link,str(content),re.S|re.M)urls=re.findall(r"",str(content),re.I|re.S|re.M)2:requests-html这个库其实是我最喜欢的我的favoritelibrary是由编写requests库的网红程序员KennethReitz所著。他在requests的基础上加入了html内容的解析,就成了requests-html的库。我们来看一个例子:我之所以喜欢用requests-html来解析内容,是因为作者为我做了高度的封装,连request返回的内容的编码格式转换都是自动完成的,可以完全让我的代码逻辑简单直接,更专注于解析工作本身。主要解析代码:links=response.html.find('table.olt',first=True).find('a')安装方法:pipinstallrequests-html3:BeautifulSoup大名鼎鼎的BeautifulSoup库已经出来好几年了。Pyhton的HTML解析库是一个重量级的库。其实我对它重量的评价就是比较臃肿,大而全。我们先来看一下代码。soup=BeautifulSoup(response,'html.parser')links=soup.findAll("table",{"class":"olt"})[0].findAll('a')BeautifulSoup解析内容也需要结合request和Parsing是分开的,在代码清晰度上会好一些,但是做复杂解析的时候代码有点繁琐,总的来说可以用,看个人喜好。安装方法:pipinstallbeautifulsoup44:lxml的XPathlxml库同时支持HTML和XML解析,支持XPath解析方式,解析效率相当高,但是需要熟悉它的一些规则语法才能使用,比如下图中的规则。让我们看看如何使用XPath解析内容。主要解析代码:content=doc.xpath("//table[@class='olt']/tr/td/a")如上图所示,XPath的解析语法有点复杂,但是可以也是一种优秀的解析手段,因为。安装方式:pipinstalllxml四种方式总结不推荐正则表达式匹配,因为已经有很多现成的库可以直接使用,我们不需要定义大量的正则表达式,它们可以'被重用。这仅供参考。.BeautifulSoup是一种基于DOM的方法。简单的说就是在解析的时候将整个网页内容加载到DOM树中。内存开销和耗时比较高,处理海量内容时不建议使用。但是,BeautifulSoup不需要结构清晰的网页内容,因为它可以直接找到我们想要的标签。比较适合一些HTML结构不清晰的网页。XPath是基于SAX机制解析的。它不像BeautifulSoup那样将整个内容加载到DOM中,而是基于事件驱动的方式解析内容,更加轻量级。但是XPath需要清晰的网页结构,开发难度比DOM解析要大。推荐在对解析效率有要求的时候使用。requests-html是一个比较新的库,封装性强,源码清晰。它在解析时直接集成了大量繁琐复杂的操作。它还支持DOM解析和XPath解析。灵活方便。这是我目前用的比较多的。图书馆的。除了上面介绍的几种网页内容分析方法外,还有很多分析方法,这里就不一一介绍了。写爬虫最重要的两点就是如何抓取数据和如何分析数据。我们需要在不同的时间学习和使用最有效的工具来完成我们的目标。