Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

官方文档地址:http://beautifulsoup.readthedocs.io/zh_CN/latest/ 建议看看官方文档,支持中文,而且写的足够详细。

安装

pip install beautifulsoup4      # 安装BeautifulSoup库
pip install lxml                # 安装解释器

使用

简单来说就是将html传递给BeautifulSoup,建议选择解释器为lxml,速度更快。 下面是例子: 1、搜索微信公众平台人工智能关键字的文章,并获取html.

import urllib.request
from bs4 import BeautifulSoup
url= "http://weixin.sogou.com/weixin?&type=2&query=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&page=1"
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
html=opener.open(url).read().decode('utf-8')

2、通过BeautifulSoup获取文章的链接

soup = BeautifulSoup(html, "lxml")
tags = soup.find_all('div', class_="txt-box")
a = 1
for tag in tags:
    url = tag.a['href']
    url = url.replace("amp;", "")
    print(a)
    print(url)
    a += 1

3、下面是通过正则表达式获取文章的链接,可以发现用BeautifulSoup更加简单和优雅。

import re
listurlpat = '<div class="txt-box">.*?(http://.*?)"'
re.compile(listurlpat, re.S).findall(html)

4、将BeautifulSoup与正则表达式配合使用 爬取百度百科网页关键字的链接

import urllib.request
import re
from bs4 import BeautifulSoup

url= "https://baike.baidu.com/item/%E5%B7%B4%E7%B4%A2%E7%BD%97%E7%B1%B3%C2%B7%E7%86%8A"
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
base_url = "https://baike.baidu.com"
opener = urllib.request.build_opener()
opener.addheaders = [headers]
html=opener.open(url).read().decode('utf-8')
soup = BeautifulSoup(html, "lxml")
tags = soup.find_all("a", {"target": "_blank", "href": re.compile("/item/(%.{2})+$")})
for i in tags:
    print(base_url + i['href'])

https://baike.baidu.com/item/%E4%B8%96%E7%95%8C%E6%94%BF%E5%BA%9C https://baike.baidu.com/item/%E7%8E%8B%E4%B8%8B%E4%B8%83%E6%AD%A6%E6%B5%B7 https://baike.baidu.com/item/%E9%9D%A9%E5%91%BD%E5%86%9B .....