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入门篇之面向对象
Oct 20 Python
Python实现简单过滤文本段的方法
May 24 Python
获取python文件扩展名和文件名方法
Feb 02 Python
详解python的ORM中Pony用法
Feb 09 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
Python绘制3D图形
May 03 Python
Python检测网络延迟的代码
May 15 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 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中的加密功能
2006/10/09 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
window.open的功能全解析
2006/10/10 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
pygame播放音乐的方法
2015/05/19 Python
Django分页功能的实现代码详解
2019/07/29 Python
Apache部署Django项目图文详解
2019/07/30 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
群众路线批评与自我批评
2014/02/06 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
基层党员对照检查材料
2014/09/24 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书