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 文件和路径操作函数小结
Nov 23 Python
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
Windows8下安装Python的BeautifulSoup
Jan 22 Python
python获取本地计算机名字的方法
Apr 29 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
django的autoreload机制实现
Jun 03 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
详解Python 中的容器 collections
Aug 17 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
详解PHP队列的实现
2019/03/14 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
浅析vue-router原理
2018/10/19 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
python登录QQ邮箱发信的实现代码
2013/02/10 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
python实现实时视频流播放代码实例
2020/01/11 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
委托公证书
2014/04/08 职场文书
保护环境建议书100字
2014/05/13 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
旅行社计调工作总结
2015/08/12 职场文书
2019入党申请书格式
2019/06/25 职场文书
python - asyncio异步编程
2021/04/06 Python
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
Oracle 触发器trigger使用案例
2022/02/24 Oracle