python beautifulsoup简用

标签: python 爬虫
203人阅读 评论(0) 收藏 举报

提示:本文以百度首页为例子写作,本例所获取的百度源码在文末

find_all方法的使用

例1:查找所有的标签

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html,"html.parser")
all = soup.find_all("a")
for tag in all:
    print(tag)

返回结果

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>
<a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a>
<a class="lb" href="http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login">登录</a>
<a class="bri" href="//www.baidu.com/more/" name="tj_briicon" style="display: block;">更多产品</a>
<a href="http://home.baidu.com">关于百度</a>
<a href="http://ir.baidu.com">About Baidu</a>
<a href="http://www.baidu.com/duty/">使用百度前必读</a>
<a class="cp-feedback" href="http://jianyi.baidu.com/">意见反馈</a>

例2:查找所有属性性值包含mnav的a标签

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html,"html.parser")
all = soup.find_all("a","mnav")
for tag in all:
    print(tag)

返回结果

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>
<a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a>

例3:获取所有标签的名称

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html,"html.parser")
all = soup.find_all(True)#设置为True !!!
for tag in all:
    print(tag.name) #获取标签的名称

返回结果

html
head
meta
meta
meta
link
title
body
div
div
div
div
div
div
img
form
input
input
input
input
input
input
span
input
span
input
div
a
a
a
a
a
noscript
a
script
a
div
div
p
a
a
p
a
a
img

例4:获取所有id=head的标签

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html,"html.parser")
all = soup.find_all(id="head")
for tag in all:
    print(tag)

返回结果

<div id="head"> <div class="head_wrapper"> <div class="s_form"> <div class="s_form_wrapper"> <div id="lg"> <img height="129" hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270"/> </div> <form action="//www.baidu.com/s" class="fm" id="form" name="f"> <input name="bdorz_come" type="hidden" value="1"/> <input name="ie" type="hidden" value="utf-8"/> <input name="f" type="hidden" value="8"/> <input name="rsv_bp" type="hidden" value="1"/> <input name="rsv_idx" type="hidden" value="1"/> <input name="tn" type="hidden" value="baidu"/><span class="bg s_ipt_wr"><input autocomplete="off" autofocus="" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/></span><span class="bg s_btn_wr"><input class="bg s_btn" id="su" type="submit" value="百度一下"/></span> </form> </div> </div> <div id="u1"> <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a> <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a> <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a> <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a> <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a> <noscript> <a class="lb" href="http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login">登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a class="bri" href="//www.baidu.com/more/" name="tj_briicon" style="display: block;">更多产品</a> </div> </div> </div>

例5:结合正则表达式,搜索包含’百度’的字符串

注意:string参数表明仅搜索标签内的内容,并不搜索标签的属性。

import requests
import re
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding #一定要注意转码,要不然编码不对可能就查找不到了。
html = r.text
soup = BeautifulSoup(html,"html.parser")
all = soup.find_all(string=re.compile("百度"))
for tag in all:
    print(tag)

返回结果

百度一下,你就知道
关于百度
使用百度前必读

例6:结合正则表达式,搜索id开头是’f’的标签

import requests
import re
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding #一定要注意转码,要不然编码不对可能就查找不到了。
html = r.text
soup = BeautifulSoup(html,"html.parser")
all = soup.find_all(id=re.compile("f"))#id中包含f不一定搜索得到,必须是开头是f的才能搜索到。
for tag in all:
    print(tag)

返回结果

<form action="//www.baidu.com/s" class="fm" id="form" name="f"> <input name="bdorz_come" type="hidden" value="1"/> <input name="ie" type="hidden" value="utf-8"/> <input name="f" type="hidden" value="8"/> <input name="rsv_bp" type="hidden" value="1"/> <input name="rsv_idx" type="hidden" value="1"/> <input name="tn" type="hidden" value="baidu"/><span class="bg s_ipt_wr"><input autocomplete="off" autofocus="" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/></span><span class="bg s_btn_wr"><input class="bg s_btn" id="su" type="submit" value="百度一下"/></span> </form>
<div id="ftCon"> <div id="ftConw"> <p id="lh"> <a href="http://home.baidu.com">关于百度</a> <a href="http://ir.baidu.com">About Baidu</a> </p> <p id="cp">©2017 Baidu <a href="http://www.baidu.com/duty/">使用百度前必读</a>  <a class="cp-feedback" href="http://jianyi.baidu.com/">意见反馈</a> 京ICP证030173号  <img src="//www.baidu.com/img/gs.gif"/> </p> </div> </div>
<div id="ftConw"> <p id="lh"> <a href="http://home.baidu.com">关于百度</a> <a href="http://ir.baidu.com">About Baidu</a> </p> <p id="cp">©2017 Baidu <a href="http://www.baidu.com/duty/">使用百度前必读</a>  <a class="cp-feedback" href="http://jianyi.baidu.com/">意见反馈</a> 京ICP证030173号  <img src="//www.baidu.com/img/gs.gif"/> </p> </div>

例7:仅搜索同一层的节点,不搜索子节点

import requests
import re
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
r.encoding = r.apparent_encoding #一定要注意转码,要不然编码不对可能就查找不到了。
html = r.text
soup = BeautifulSoup(html,"html.parser")
soup = soup.body #把soup指到body下
all = soup.find_all(True,recursive=False)#recursive这个参数用来表明是否搜索所有的子孙节点,默认为True
for tag in all:
    print(tag.name)

返回结果

div

百度源码

<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

参考文档

北京理工大学嵩天老师的爬虫与信息提取课程随堂ppt

查看评论

python爬虫还在用BeautifulSoup?你有更好的选择!

1.前言 1.1 抓取网页 本文将举例说明抓取网页数据的三种方式:正则表达式、BeautifulSoup、lxml。 获取网页内容所用代码详情请参照Python网络爬虫-你的第一个爬虫。利用...
  • mifaxie
  • mifaxie
  • 2018-03-07 22:41:08
  • 134

Python 使用BeautifulSoup方式爬虫爬取数据

Python 使用BeautifulSoup方式爬虫爬取数据
  • wzj971015
  • wzj971015
  • 2017-11-15 10:21:51
  • 154

python学习(6):python爬虫之requests和BeautifulSoup的使用

前言: Requests库跟urllib库的作用相似,都是根据http协议操作各种消息和页面。 都说Requests库比urllib库好用,我也没有体会到好在哪儿。 但是,urllib库有一点不爽的...
  • qq_32166627
  • qq_32166627
  • 2017-03-04 21:10:22
  • 3880

Python爬虫之使用BeautifulSoup解析HTML文本

直接上代码,注释也写了 from bs4 import BeautifulSoup #2016.10.20 Python爬虫之解析HTML # 摘要 # 创建对象,DOM树 # 搜索节点,访问...
  • SFtec
  • SFtec
  • 2016-10-21 16:37:37
  • 2539

Python2 爬虫(九) -- Scrapy & BeautifulSoup之再爬CSDN博文

序 我的Python3爬虫(五)博文使用utllib基本函数以及正则表达式技术实现了爬取csdn全部博文信息的任务。 链接:Python3 爬虫(五) -- 单线程爬取我的CSDN全部博文 上一篇P...
  • fly_yr
  • fly_yr
  • 2016-06-02 21:54:11
  • 10400

爬虫:用requests和BeautifulSoup爬取网上图片

从一个网页上爬取全部图片:import requests from bs4 import BeautifulSoup import os #获取html f = requests.get('http:...
  • jinzhao1993
  • jinzhao1993
  • 2016-07-23 18:18:43
  • 2303

Python 用BeautifulSoup 解析Html

1. 安装Beautifulsoup4pip install beautifulsoup4 pip install lxml pip install html5liblxml 和 html5lib 是...
  • fox64194167
  • fox64194167
  • 2017-07-29 21:15:32
  • 633

Python爬虫---数据的提取---正则/Xpath/beautifulsoup--正则

正则
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016-07-12 16:24:39
  • 1721

python2.7 beautifulsoup学习使用

学习使用python的beautiful soup库,大大方便了网络爬虫对于HTML文件的解析,beautiful soup将HTML拆解成对象处理,将HTML转换成字典和数组,相比利用正则表达式解析...
  • q51522613
  • q51522613
  • 2015-08-29 18:15:51
  • 2237

Python爬虫:用BeautifulSoup进行NBA数据爬取

爬虫主要就是要过滤掉网页中无用的信息,抓取网页中有用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解,如网页的标签,网页的语言等知识,推荐去W3School:...
  • qq_25819827
  • qq_25819827
  • 2017-04-13 17:19:44
  • 5966
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1166
    排名: 4万+
    最新评论