python中使用BeautifulSoup

2017/2/13 爬虫

在使用python抓取网页内容的时候,经常会遇到一些比较奇葩的内容,如果是直接处理的话不仅麻烦而且稍微有改动就需要重新处理。使用BeautifulSoup处理网页内容之后再进行后续处理就比较简单了。

1.安装BeautifulSoup

我是在Ubuntu16下安装的,直接使用

$sudo apt-get update

$sudo apt-get install python-bs4

如果安装了pip可以使用

$ pip install beautifulsoup4

就可以进行安装了,不同版本的可能名字略微有区别,注意查看。也可以选择使用下载软件然后再进行安装。通过下一步可以检验是否安装成功。

2.使用BeautifulSoup

from bs4 import BeautifulSoup

注意bs4不要写错了,如果写的是BeautifulSoup就可能会报错。

3.简单的使用

resp = urllib2.urlopen(url)

soup = BeautifulSoup(resp.read().decode('gbk', 'ignore'), 'lxml')

在抓取网页的时候我们一般都要考虑编码的问题,不然很容易会出现乱码。这里使用要抓取的网页一样的编码。

简单的使用例子:

title =soup.find('h1')用来获取h1标签和内容

title =soup.find('h1', id='Title').string用来获取id为Title的h1标签的内容

不过如果要存到数据库的话还是需要用str(title)处理,不然不能正确的存到MySQL数据库中

soup.title用来获取title标签

soup.find_all('a')用来获取全部的a标签

soup.find("p", {"class" : "title"})用来获取class为title的p标签

实例:

<div class="title" id="title2"><i>1</i>要获取的内容</div>

获取其中文字的办法:

1.先获取整个div的内容

title = soup.div
title = soup.find("div", id="title2")
title = soup.find("div", {"class" : "title"})
1
2
3

上述三种办法均可以获取整个div的内容

2.获取i标签的内容

i_content = title.i

3.获取剩余的内容

content = i_content.next_sibling.string

最后一个string使用来转化其中内容的。有以上的一些方法就可以处理绝大部分的问题了