python 3 爬虫学习笔记(1) —— 初识BeautifulSoup

一.关于BeautifulSoup:

BeautifulSoup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

二.BeautifulSoup在windows系统下的的安装

在学习中使用BeautifulSoup 4版本

  • 首先,在网上将BS4的压缩包下载下来,并解压

  • 打开cmd控制台,输入cd+“空格”+文件地址

  • 回车

  • 输入文件按所在磁盘,比如"E:"
    python 3 爬虫学习笔记(1) —— 初识BeautifulSoup
    这样就进入了指定的路径

  • 执行安装文件,输入“setup.py install”,就可以进行安装了

  • 我们可以测试一下有没有安装成功:
    python 3 爬虫学习笔记(1) —— 初识BeautifulSoup

  • 如图,在Python下输入from bs4 import BeautifulSoup,如果没出错,就是安装成功了。

三.url和urllib

  1. 关于URL,百度百科的定义是这样:

url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

  1. URL的组成:
    例如书中给出的例子:
    http://www.pythonscraping.com/pages/page1.html
    这个URL中:
    第一部分"http" : 协议部分,表示超文本传输协议;
    第二部分"www.pythonscraping.com" : 文件所在的服务器的名称或IP地址;
    第三部分pages/page1.html :到达这个文件的路径和文件本身的名称
  2. 关于 urllib库:

Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库,其主要包括一下模块:
urllib.request 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块

四.运行BeautifulSoup

  1. 首先,从urllib.request 请求模块中,引入urlopen:
from urllib.request import urlopen
  1. 引入BeautifulSoup:
from bs4 import BeautifulSoup
  1. 建立一个名为html的对象,利用urlopen方法获取url ; 再调用html.read()获取网页的HTML内容,这样就可以把HTML内容传到名为bsObj的BeautifulSoup对象:
html=urlopen("http://www.pythonscraping.com/pages/page1.html")
bsObj=BeautifulSoup(html.read())
  1. 输出想要获取的结果:
print(bsObj.h1)

python 3 爬虫学习笔记(1) —— 初识BeautifulSoup

输出结果为:

An Interesting Title


输出的正是这个页面的标题

5.结果分析:

  • 首先,我们去看看书中提供的url指向一个什么样的东西,在浏览器中输入所给的url就可以看到:python 3 爬虫学习笔记(1) —— 初识BeautifulSoup

  • 利用Chrome浏览器的开发者工具(F12即可),我们可以看到它的HTML代码:python 3 爬虫学习笔记(1) —— 初识BeautifulSoup

  • 可以看出,我们从网页中提取的h1标签被嵌在BeautifulSoup对象bsObj的第二层:
    (html->body->h1)
    但是,当我们从对象中提取h1标签,可以直接调用它:
    bsObj.h1
    其实,下列所有方法都可以调用它:
    bsObj.html.body.h1
    bsObj.body.h1
    bsObj.html.h1
    这也正体现了BeautifulSoup这个库的强大

  • 同样的,如果想要获取别的标签内容,使用相同的方法即可,还是比较简单的,例如,我们将代码改为:

print(bsObj.title)

就可以获取标签title的内容:

python 3 爬虫学习笔记(1) —— 初识BeautifulSoup

  • 如图,输出结果为 "A Useful Page"