利用python3 beautifulsoup4解析网页(一)
和所有的新手一样,刚接触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个,我就开始写这个系统。