Python-网络爬虫之BeautifulSoup(1)

一、urllib包的使用
Python最著名的作用便是用来爬取网络数据,而python中也有相关的标准库urllib。
需要注意的是在python2.x中其名为urllib2,在python中改为urllib,并被分为urllib.request、urllib.parse和urllib.error,在import库时需要注意

from urllib.request import urlopen
html=urlopen("http://www.pythonscraping.com/pages/page1.html")
print(html.read())

以上是urlopen的使用,可以获得指定链接上的源代码并保存成html对象,值得注意的是需要添加.read()函数,才能输出内容,否则是无法输出的


二、BeautifulSoup的初步使用
虽然读取网页内容很简单,但是如何对其进行处理或者挑选却是麻烦的,因为我们需要面对许多的html标签。为此需要借助第三方类库,而其中最为著名的就是BeautifulSoup,本文示例采用bs4(简称也是)

1.安装
有关类库的安装参考,Python语言学习-安装第三方类库
之后导入包即可from bs4 import BeautifulSoup

2.标签的初步使用
在利用bs4对html进行操作前,需要先利用bs4将其转化成可操作的对象

from urllib.request import urlopen
from bs4 import BeautifulSoup
html=urlopen("http://www.pythonscraping.com/pages/page1.html")
bsObj = BeautifulSoup(html.read())
print(bsObj.h1)

输出结果:<h1>An Interesting Title</h1>
bsObj对象将html内容转化成了如下形式

<html>
    <head>
        <title>A Useful Page</title>
    </head>
    <body>
        <h1>An Interesting Title</h1>
        <div>……
        </div>
    </body>
</html>

因此我们可以直接调用所需的标签,当然这种方式之后输出第一个对应标签
类似的如bsObj.body.h1都是可以达到同样的目的
有关BeautifulSoup标签更进一步的应用下一节会有更详细的介绍

3.异常处理
网络环境是复杂的,各种标签的存在也使得网络数据爬取更加容易出现异常。如果对于这些异常情况不做处理,代码的适应性会大打折扣,对之后修改bug也大大不利。

html=urlopen("http://www.pythonscraping.com/pages/page1.html")
存在两种可能的异常:
①服务器不存在
②网页不存在或或获取页面错误
此错误类型为HTTPEror

又如print(bsObj.h1)
存在找不到对应标签的错误
此错误类型为AttributeError

在对异常处理时,往往要导入urllib.error包,具体代码如下:

from urllib.error import HTTPError
from urllib.request import urlopen
from bs4 import BeautifulSoup
try:
    html=urlopen("http://www.pythonscraping.com/pages/page.1
                 .html")       
except HTTPError as e:
    print("web_site is not found")  #代表网页不存在或服务器无法访问
else:  #若不存在上述异常
    bsObj = BeautifulSoup(html.read())
    try:
        print(bsObj.h1)
    except AttributeError as e:
        print("the title is not found")

为了代码的简洁和复用,这类代码可以封装成类

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值