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 相关文章推荐
python3 pillow生成简单验证码图片的示例
Sep 19 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
python opencv如何实现图片绘制
Jan 19 Python
Python如何在循环内使用list.remove()
Jun 01 Python
Python自动化测试中yaml文件读取操作
Aug 20 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访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
Opacity.js
2007/01/22 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
python与C互相调用的方法详解
2017/07/14 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
厂区绿化方案
2014/05/08 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
小学领导班子对照材料
2014/08/23 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
对公司的意见和建议
2015/06/04 职场文书
运动会通讯稿100字
2015/07/20 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
Golang实现AES对称加密的过程详解
2021/05/20 Golang
代码解析React中setState同步和异步问题
2021/06/03 Javascript
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang