BeautifulSoup将html文档转换成一个属性结构,每个节点都是python对象。这样我们就能针对每个结点进行操作。参考如下代码
def parse_url():
    try:
        req=urllib2.Request('http://www.xunsee.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615/index.shtml')
        fd=urllib2.urlopen(req)
       
html=BeautifulSoup(fd)     except urllib2.URLError,e:
        print e
BeautifulSoup中传入的就是urlopen中反馈的html网页。但是出现提示
E:\python2.7.11\python.exe E:/py_prj/test.py
E:\python2.7.11\lib\site-packages\bs4\__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.
 
The code that caused this warning is on line 43 of the file E:/py_prj/test.py. To get rid of this warning, change code that looks like this:
 
 BeautifulSoup([your markup])
 
to this:
 
 BeautifulSoup([your markup], "lxml")
 
  markup_type=markup_type))

这个提示的意思是没有给BeautifulSoup中传递一个解析网页的方式。有2中方式可以使用:html.parser以及lxml。这里我们先用html.parser,lxml后面再讲。代码改成如下就OK了

html=BeautifulSoup(fd,"html.parser")

在解析网页前,我们先来看几个概念,标签,属性。

比如下面的网页结构。<a href=”1.shtml”>第一节</a> 其中a就是标签,里面的href就是属性。第一节就是标签的内容

BeautifulSoup中查找属性的方法如下:

print html.meta.encode('gbk')
print html.meta.attrs
结合如下的代码,查找tag为meta的元素。并打印meta的所有属性:

得到的结果如下:

E:\python2.7.11\python.exe E:/py_prj/test.py

<meta content="text/html; charset=gbk" http-equiv="Content-Type"/>

{u'content': u'text/html; charset=gb2312', u'http-equiv': u'Content-Type'}

如果想得到某项属性,可以按照如下的方式:

print html.meta.attrs['content'] 输出结果是text/html
 

如果我们想得到标签的内容也就是文本怎么办呢,比如下面的这个方式

print html.title.string.encode('gbk') .string的功能就是得到标签所对应的文本
但是上面的方法只能找出第一个满足的标签,如果网页中有多个相同名字的标签该如何区分呢,比如下面的这种场景:有多个span以及a的标签

那么就需要另外的方式来获取。如下代码用find_all的方式来获取所有标签为a的结构并打印出来
for a in html.find_all('a'):
    print a.encode('gbk')
得到的结果如下,由于太多,只列出了其中一部分。

如果想得到这些节点的内容可以用get_text()的方法。如下:
for a in html.find_all('a'):
    print a.get_text()
如果想得到这些节点的全部属性,则可以用下面的方法:
for a in html.find_all('a'):
    print a.attrs
如果想得到某个属性的值,前面的a.attrs返回的是一个字典。比如下面的要获取class属性的值,用如下的方法
for a in html.find_all('a'):
    print a.attrs['class']
find_all方法还可以给查找加限定值:比如想获取如下所示的<a href=”1.shtml”>的标签

这里第一个参数代表标签名字,第二参数代表属性名
for a in html.find_all('a',href="1.shtml"):
    print a.encode('gbk')
还可以设定多个参数查找,比如查找form这个标签

for a in html.find_all('form',method="post",target="_blank"):
    print a.encode('gbk')
当然在查找里面也可以运用正则表达式,比如re.complie(“a.*”)之类的方法
另外还可以限制查找的数目:下面的表达式就是获取前5条查找结果
for a in html.find_all('a',limit=5):
    print a.attrs['class']
find家族里面还有find_parents/find_parent查找父节点。Find_next_siblings()/find_next_sibling()查找下一个兄弟以及
find_previous_siblings()/find_previous_sibling()查找前面的兄弟节点。



												

python网络爬虫之beautfiulSoup的更多相关文章

  1. 关于Python网络爬虫实战笔记③

    Python网络爬虫实战笔记③如何下载韩寒博客文章 Python网络爬虫实战笔记③如何下载韩寒博客文章 target:下载全部的文章 1. 博客列表页面规则 也就是, http://blog.sina ...

  2. 关于Python网络爬虫实战笔记①

    python网络爬虫项目实战笔记①如何下载韩寒的博客文章 python网络爬虫项目实战笔记①如何下载韩寒的博客文章 1. 打开韩寒博客列表页面 http://blog.sina.com.cn/s/ar ...

  3. python 网络爬虫(二) BFS不断抓URL并放到文件中

    上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...

  4. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  5. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  6. Python 正则表达式 (python网络爬虫)

    昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...

  7. Python网络爬虫笔记(五):下载、分析京东P20销售数据

    (一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面 ...

  8. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  9. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

随机推荐

  1. 第一篇 Rewrite规则简介

    1.Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用到rewrite模块,必 ...

  2. webpack中利用require.ensure()实现按需加载

    webpack中的require.ensure()可以实现按需加载资源包括js,css等,它会给里面require的文件单独打包,不和主文件打包在一起,webpack会自动配置名字,如0.js,1.j ...

  3. (转)html中 cookie设置

    box=="checkBox  '是否记住用户密码'": window.onload=function init() {    var box = getCookie(" ...

  4. 刚由pc端做移动端的感受

    最近新调到一个项目,由原来的pc端,调到移动端,一切都是那么的不一样,在得知即将调到移动端的时候,听说我们的技术要用到vue,Aladdin,还有es6,有点懵... 我做了以下准备工作: 1,买了本 ...

  5. mysql获取当前日期的周一和周日的日期

    ,,date_format(curdate(),)//获取当前日期 在本周的周一 的日期 ,,date_format(curdate(),)//获取当前日期 在本周的周日 的日期

  6. Python的RSA加密和PBE加密

    最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现. 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是P ...

  7. [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) #include<iostream> unsigned N, A, ...

  8. 重新绑定ItemsSource先设置ItemsSource = null;的原因

    即报错信息为:在使用 ItemsSource 之前,项集合必须为空.   原因:Items和ItemSource,只能有一个生效,想用其中一个,另一个必须是空.   重新绑定ItemSource,虽然 ...

  9. 【JAVAWEB学习笔记】02_HTML&CSS

    //--------------纯文本版------------------------------------------------- 今日新增单词(更多属性查看手册) form:表单 (要提交的 ...

  10. PHP简单分页省略中间页码

    <?php /** * @desc created by sublime text3 * @author jxl <[57953279@qq.com>]> * @since 2 ...