python网络爬虫之beautfiulSoup
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的更多相关文章
- 关于Python网络爬虫实战笔记③
Python网络爬虫实战笔记③如何下载韩寒博客文章 Python网络爬虫实战笔记③如何下载韩寒博客文章 target:下载全部的文章 1. 博客列表页面规则 也就是, http://blog.sina ...
- 关于Python网络爬虫实战笔记①
python网络爬虫项目实战笔记①如何下载韩寒的博客文章 python网络爬虫项目实战笔记①如何下载韩寒的博客文章 1. 打开韩寒博客列表页面 http://blog.sina.com.cn/s/ar ...
- python 网络爬虫(二) BFS不断抓URL并放到文件中
上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- Python网络爬虫
http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...
- Python 正则表达式 (python网络爬虫)
昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...
- Python网络爬虫笔记(五):下载、分析京东P20销售数据
(一) 分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1. 翻页的时候,谷歌F12的Network页签可以看到下面 ...
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
随机推荐
- 第一篇 Rewrite规则简介
1.Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用到rewrite模块,必 ...
- webpack中利用require.ensure()实现按需加载
webpack中的require.ensure()可以实现按需加载资源包括js,css等,它会给里面require的文件单独打包,不和主文件打包在一起,webpack会自动配置名字,如0.js,1.j ...
- (转)html中 cookie设置
box=="checkBox '是否记住用户密码'": window.onload=function init() { var box = getCookie(" ...
- 刚由pc端做移动端的感受
最近新调到一个项目,由原来的pc端,调到移动端,一切都是那么的不一样,在得知即将调到移动端的时候,听说我们的技术要用到vue,Aladdin,还有es6,有点懵... 我做了以下准备工作: 1,买了本 ...
- mysql获取当前日期的周一和周日的日期
,,date_format(curdate(),)//获取当前日期 在本周的周一 的日期 ,,date_format(curdate(),)//获取当前日期 在本周的周日 的日期
- Python的RSA加密和PBE加密
最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现. 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是P ...
- [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) #include<iostream> unsigned N, A, ...
- 重新绑定ItemsSource先设置ItemsSource = null;的原因
即报错信息为:在使用 ItemsSource 之前,项集合必须为空. 原因:Items和ItemSource,只能有一个生效,想用其中一个,另一个必须是空. 重新绑定ItemSource,虽然 ...
- 【JAVAWEB学习笔记】02_HTML&CSS
//--------------纯文本版------------------------------------------------- 今日新增单词(更多属性查看手册) form:表单 (要提交的 ...
- PHP简单分页省略中间页码
<?php /** * @desc created by sublime text3 * @author jxl <[57953279@qq.com>]> * @since 2 ...