python利用beautifulSoup实现爬虫

 更新时间:2014年09月29日 00:27:04   投稿:mdxy-dxy  
这篇文章主要介绍了python利用beautifulSoup实现爬虫,需要的朋友可以参考下

以前讲过利用phantomjs做爬虫抓网页 https://www.jb51.net/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 = """
&lt;html&gt;&lt;head&gt;&lt;title&gt;The Dormouse's story&lt;/title&gt;&lt;/head&gt;

&lt;p&gt;&lt;b&gt;The Dormouse's story&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Once upon a time there were three little sisters; and their names were
&lt;a href="http://example.com/elsie" id="link1"&gt;Elsie&lt;/a&gt;,
&lt;a href="http://example.com/lacie" id="link2"&gt;Lacie&lt;/a&gt; and
&lt;a href="http://example.com/tillie" id="link3"&gt;Tillie&lt;/a&gt;;
and they lived at the bottom of a well.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;
"""

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线程池ThreadPoolExecutor,传单个参数和多个参数方式

    python线程池ThreadPoolExecutor,传单个参数和多个参数方式

    这篇文章主要介绍了python线程池ThreadPoolExecutor,传单个参数和多个参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • OpenCV-Python模板匹配人眼的实例

    OpenCV-Python模板匹配人眼的实例

    模板匹配是指在当前图像A内寻找与图像B最相似的部分,本文详细的介绍了OpenCV-Python模板匹配人眼的实例,感兴趣的可以了解一下
    2021-06-06
  • 用Python将GIF动图分解成多张静态图片

    用Python将GIF动图分解成多张静态图片

    今天给大家带来的是关于Python的相关知识,文章围绕着如何用Python将GIF动图分解成多张静态图片展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • python3中SQLMap安装教程

    python3中SQLMap安装教程

    本文主要介绍了python3中SQLMap安装教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 分析Python读取文件时的路径问题

    分析Python读取文件时的路径问题

    本篇文章通过图文实例的方式给大家详细分析了Python读取文件时的路径问题,对此有需求的朋友可以参考学习下。
    2018-02-02
  • Python列表(list)、字典(dict)、字符串(string)基本操作小结

    Python列表(list)、字典(dict)、字符串(string)基本操作小结

    这篇文章主要介绍了Python列表(list)、字典(dict)、字符串(string)基本操作小结,本文总结了最基本最常用的一些操作,需要的朋友可以参考下
    2014-11-11
  • Django ORM多对多查询方法(自定义第三张表&ManyToManyField)

    Django ORM多对多查询方法(自定义第三张表&ManyToManyField)

    今天小编就为大家分享一篇Django ORM多对多查询方法(自定义第三张表&ManyToManyField),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • numpy 声明空数组详解

    numpy 声明空数组详解

    今天小编就为大家分享一篇numpy 声明空数组详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • PyQt5每天必学之创建窗口居中效果

    PyQt5每天必学之创建窗口居中效果

    这篇文章主要介绍了PyQt5每天必学之创建窗口居中效果,使应用程序窗口显示在屏幕的中心,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • python文件读写操作小结

    python文件读写操作小结

    python文件对象提供了三个“读”方法: read()、readline() 和 readlines(),每种方法可以接受一个变量以限制每次读取的数据量,这篇文章主要介绍了python文件读写小结,需要的朋友可以参考下
    2022-02-02

最新评论