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中执行shell命令的几个方法小结
Sep 18 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
《Python学习手册》学习总结
Jan 17 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 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生成Flash动画的实现代码
2010/03/12 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
一个javascript参数的小问题
2008/03/02 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
python反转列表的三种方式解析
2019/11/08 Python
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
华为的Java面试题
2014/03/07 面试题
餐厅经理岗位职责范本
2014/02/17 职场文书
《春天来了》教学反思
2014/04/07 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
节水倡议书
2015/01/19 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python