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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
qpython3 读取安卓lastpass Cookies
Jun 19 Python
Python MD5加密实例详解
Aug 02 Python
基于Django的python验证码(实例讲解)
Oct 23 Python
使用python生成目录树
Mar 29 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
python 自定义装饰器实例详解
Jul 20 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 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
改变Apache端口等配置修改方法
2008/06/05 PHP
php的一个简单加密解密代码
2014/01/14 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python重试装饰器的简单实现方法
2019/01/31 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
毕业生求职自荐信怎么写
2014/01/08 职场文书
初二学生评语大全
2014/12/26 职场文书
会计工作能力自我评价
2015/03/05 职场文书
入党积极分子党小组意见
2015/06/02 职场文书