python利用beautifulSoup实现爬虫


Posted in Python onSeptember 29, 2014

以前讲过利用phantomjs做爬虫抓网页 https://3water.com/article/55789.htm 是配合选择器做的

利用 beautifulSoup(文档 :http://www.crummy.com/software/BeautifulSoup/bs4/doc/)这个python模块,可以很轻松的抓取网页内容

# coding=utf-8
import urllib
from bs4 import BeautifulSoup

url ='http://www.baidu.com/s'
values ={'wd':'网球'}
encoded_param = urllib.urlencode(values)
full_url = url +'?'+ encoded_param
response = urllib.urlopen(full_url)
soup =BeautifulSoup(response)
alinks = soup.find_all('a')

上面可以抓取百度搜出来结果是网球的记录。

beautifulSoup内置了很多非常有用的方法。

几个比较好用的特性:

构造一个node元素

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')

tag = soup.b

type(tag)

# <class 'bs4.element.Tag'>

属性可以使用attr拿到,结果是字典

tag.attrs

# {u'class': u'boldest'}

或者直接tag.class取属性也可。

也可以自由操作属性

tag['class'] = 'verybold'
tag['id'] = 1
tag
# <blockquote class="verybold" id="1">Extremely bold</blockquote>

del tag['class']
del tag['id']
tag
# <blockquote>Extremely bold</blockquote>

tag['class']
# KeyError: 'class'
print(tag.get('class'))
# None

还可以随便操作,查找dom元素,比如下面的例子

1.构建一份文档

html_doc = """
<html><head><title>The Dormouse's story</title></head>

<p><b>The Dormouse's story</b></p>

<p>Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" id="link1">Elsie</a>,
<a href="http://example.com/lacie" id="link2">Lacie</a> and
<a href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p>...</p>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)

2.各种搞

soup.head
# <head><title>The Dormouse's story</title></head>
soup.title
# <title>The Dormouse's story</title>
soup.body.b
# <b>The Dormouse's story</b>
soup.a
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
soup.find_all('a')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
head_tag = soup.head
head_tag
# <head><title>The Dormouse's story</title></head>

head_tag.contents
[<title>The Dormouse's story</title>]

title_tag = head_tag.contents[0]
title_tag
# <title>The Dormouse's story</title>
title_tag.contents
# [u'The Dormouse's story']
len(soup.contents)
# 1
soup.contents[0].name
# u'html'
text = title_tag.contents[0]
text.contents

for child in title_tag.children:
  print(child)
head_tag.contents
# [<title>The Dormouse's story</title>]
for child in head_tag.descendants:
  print(child)
# <title>The Dormouse's story</title>
# The Dormouse's story

len(list(soup.children))
# 1
len(list(soup.descendants))
# 25
title_tag.string
# u'The Dormouse's story'
Python 相关文章推荐
Python中用Spark模块的使用教程
Apr 13 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
PyCharm代码格式调整方法
May 23 Python
pandas值替换方法
Jul 10 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
安装不同版本的tensorflow与models方法实现
Feb 20 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 #Python
跟老齐学Python之从格式化表达式到方法
Sep 28 #Python
跟老齐学Python之print详解
Sep 28 #Python
跟老齐学Python之正规地说一句话
Sep 28 #Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 #Python
跟老齐学Python之不要红头文件(2)
Sep 28 #Python
跟老齐学Python之不要红头文件(1)
Sep 28 #Python
You might like
关于PHP求解三数之和问题详析
2020/11/09 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
JS中表单的使用小结
2014/01/11 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
python从入门到精通(DAY 2)
2015/12/20 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python网络应用开发知识点浅析
2019/05/28 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
keras.layer.input()用法说明
2020/06/16 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
国贸专业毕业求职信
2014/06/11 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
解除租房协议书
2014/12/03 职场文书
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
Linux中如何安装并部署Redis
2022/04/18 Servers