4. 化平淡为神奇的BeautifulSoup

来源:互联网 发布:软件激活码拿码平台 编辑:程序博客网 时间:2024/06/03 14:19

BeautifulSoup介绍

这玩意啊,是用来解析复杂的网络结构的。
例如最普通的网页:

html    head            title--title    head    body            h1--h1            div--div    bodyhtml

如果是平时,我们要取得h1标签,似乎并没有办法。
但是现在我们有了BeautifuSoup,做这样的事简直是易如反掌。

安装BeautifulSoup

我们先要安装BeautifulSoup , 和之前一样都是要用pip3 install xxx来安装
还有要安装一个lxml库:http://www.lfd.uci.edu/~gohlke/pythonlibs/

平常的方法并不能安装lxml库..
这里写图片描述

这里cp36m代表python3.6,amd64代表64位系统。(windows系统)

下载完之后呢.

我们在cmd下运行:pip install lxml-3.7.3-cp35-cp35m-win_amd64.whl
这样就OK啦..

牛刀小试

例如我们要取得http://www.pythonscraping.com/pages/page1.html这个页面的h1标签

这个URL反馈过来的全部信息是:

<html><head><title>A Useful Page</title></head><body><h1>An Interesting Title</h1><div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div></body></html>

我们通过以下代码来获得h1标签:

import requestsfrom bs4 import BeautifulSoupdef printUrl(url):    resp = requests.get(url)    bsObj = BeautifulSoup(resp.text,'lxml')    print(bsObj.h1)if __name__ == '__main__':    url = 'http://www.pythonscraping.com/pages/page1.html'    printUrl(url)

输出的结果是:

<h1>An Interesting Title</h1>

当我们要获得h1标签内的内容时,我们该怎么做?
仅仅需要的是在标签后加一个get_text()方法

print(bsObj.h1.get_text())

到目前位置,我们已经介绍了BeautifulSoup其中两个对象。

BeautifulSoup对象

前面代码展示的bsObj

标签tag对象

bsObj.h1, 即是bsObj对象直接调用子标签获得的对象。

BeautifulSoup的findAll方法

我们之前用bsObj.h1仅能获得第一个指定标签(其实上一个例子也仅有一个h1标签 ^_^)

但是现在findAll则能获得所有指定的标签!!

现在我们使用一个新的URL:

http://www.pythonscraping.com/pages/warandpeace.html

用以下方法,我们就能打印出所有class=green的span:

import requestsfrom bs4 import BeautifulSoupdef printUrl(url):    resp = requests.get(url)    bsObj = BeautifulSoup(resp.text,'lxml')    aLLName = bsObj.findAll('span', {'class':'green'})    for name in aLLName:        print(name)if __name__ == '__main__':    url = 'http://www.pythonscraping.com/pages/warandpeace.html'    printUrl(url)

就这样,我们就能简单快速得获取我们需要的数据,So Easy。

还有另外两个对象,我们遇到再讨论吧..

原创粉丝点击