在使用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"})
2
3
上述三种办法均可以获取整个div的内容
2.获取i标签的内容
i_content = title.i
3.获取剩余的内容
content = i_content.next_sibling.string
最后一个string使用来转化其中内容的。有以上的一些方法就可以处理绝大部分的问题了