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模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
详解字典树Trie结构及其Python代码实现
Jun 03 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
基于python log取对数详解
Jun 08 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
celery4+django2定时任务的实现代码
Dec 23 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
Python字节单位转换实例
Dec 05 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
Django中modelform组件实例用法总结
Feb 10 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 读取文件的正确方法
2009/04/29 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
深入分析Cookie的安全性问题
2015/03/01 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
python模块之time模块(实例讲解)
2017/09/13 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
pytorch 模型可视化的例子
2019/08/17 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
康拓普公司Java笔面试
2016/09/23 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
初中生操行评语大全
2014/04/24 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python