利用python3 beautifulsoup4解析网页(一)

作者: 杨圣亮 分类: python编程 发布时间: 2016-11-05 22:07:11

和所有的新手一样,刚接触python的时候,在python版本的选择上也纠结了很长时间。到底是用python 2还是python3 呢?“实践是检验真理的唯一标准”,最好的办法当然是实践了。通过使用python2.75和python3.4后一段时间后,最终确定使用python 3 系列了,还是要向前看的嘛。

beautifulsoup是python的一个解析网页的库,最新版本是4.3.2,进入4.x 后,beautifulsoup有了个简写的名字了—bs4,而不再是原先长长的 beautifulsoup了。

本文将着重介绍如何使用requests库获取网页后,用bs4解析网页,拿到我们所需要的数据。

准备工作:确定已经安装python了(python 2 或 python 3均可), requests 和bs4,没有安装这两个库的,按照以下的方式进行安装:

windows安装 requests,beautifulsoup4的方法
打开CMD

运行: 

pip install requests

pip install beautifulsoup4

linux 安装 requests,beautifulsoup4的方法
打开终端,执行:

pip install requests
pip install beautifulsoup4

安装完成后,可以开始了。

任务:学以致用,挑对SEO有帮助的东西来拿。获取本博客首页的标题<title>文字和 <h1>标签文字。

用你所熟悉的编辑器开始吧。

#!/usr/bin/env python3.4
# -*- coding: utf-8 -*-
""""
作者:     jinaYang
网站:     yangshengliang.com
邮箱:     945771434@qq.com
程序功能: 使用bs4获取 yangshenglinag.com首页的标题和h1

"""
from bs4 import BeautifulSoup   #导入bs4
import requests


class Html(object):
    soup = None
    def __init__(self):
        url = 'https://www.yangshengliang.com' # 首页url
        html = requests.get(url).content # 获取首页的html
        self.soup = BeautifulSoup (html, 'lxml') # 得到soup对象

    def getTitle(self):
        #title = self.soup.title #返回的结果带title标签
        title = self.soup.title.string
        return title  # 返itle

    def getH1(self):
        try:
            h1 = self.soup.select("h1") # 获取h1,结果带h1标签

            if (len(h1) > 1):
                print (''.join(["糟糕了 ", str(len(h1)),"个h1,不利seo"]))

        except AttributeError:
            return "h1不存在"

        return h1

demo = Html()
print ( "标题:%s\n" % (demo.getTitle() ))
print ("h1:\n%s"  %(demo.getH1()))

运行后得到结果

标题:湖南SEO_杨圣亮博客_研究SEO,网站建设,网络营销推广技术

糟糕了 10个h1,非常不利seo
h1:
[<h1 class="entry-title">
<a href="https://www.yangshengliang.com/biancheng-kaifa/php/295.html" rel="bookmark">php 获取网页标题(并解决编码问题)</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/sousuodongtai/suanfa/291.html" rel="bookmark">百度冰桶算法4.5更新:发力打击Landing Page恶劣广告行为</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/biancheng-kaifa/web-youhua/278.html" rel="bookmark">雅虎:加速网站运行的14条前端建议</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/biancheng-kaifa/qianduan/272.html" rel="bookmark">javascript 获取网页高宽等信息</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/kaiyuan-shijie/kaiyuan-ruanjian/266.html" rel="bookmark">Linux下 netbeans 安装提示找不到对应的jdk的解决办法</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/wang-luo-ying-xiao-ruan-jian/259.html" rel="bookmark">搜索引擎下拉框推广系统</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/biancheng-kaifa/mysql/221.html" rel="bookmark">mysql数据表添加列,修改列,删除列的方法</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/biancheng-kaifa/php/218.html" rel="bookmark">拒绝不规范:仅允许使用汉字,英文,数字等方式注册用户名的php正则表达式</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/webserver/209.html" rel="bookmark">centos 7 将自带的php5.4升级到php5.6(亲测成功)</a>
</h1>, <h1 class="entry-title">
<a href="https://www.yangshengliang.com/biancheng-kaifa/java-jiancheng/206.html" rel="bookmark">ubuntu 14.04 安装openjdk 8(亲测成功)</a>
</h1>]

效果达到了,同时也暴露了一个问题——本博客没有做SEO处理,一个首页就有10 个h1,下定决定,有空一定要优化下。

解析:

流程:1.requests库获取网页->2.Beautifulsoup创建soup对象->使用bs4解析得到相应的内容。

requests库易学易用,且功能强大,抓取一个网页仅需要两行代码,导入 requests库,调用get方法,填写url,仅此而已。强烈推荐:requests官方文档

import requests

html = requests.get(url)

关于bs4,官方文档的介绍已经非常详细了,不再复述,传送: Beautifulsoup 4官方文档  ,最近事情较多,想用bs4写个检测网站seo情况的检测系统,不知道需要该系统的人多不多?如果有需要可以留言,留言达到100个,我就开始写这个系统。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

3  +  3  =  

微信