Python 开发轻量级爬虫07
Python 开发轻量级爬虫
(imooc总结07--网页解析器BeautifulSoup)
BeautifulSoup下载和安装
使用pip install 安装:在命令行cmd之后输入,pip install BeautifulSoup4
BeautifulSoup语法
分为三个部分。
首先根据下载好的html网页字符串,我们创建一个BeautifulSoup这个对象,创建这个对象的同时就将整个文档字符串下载成一个DOM树。
然后根据这个dom树,我们就可以进行各种节点的搜索,这里有两个方法find_all/find。find_all方法会搜索出所有满足要求的节点,
find方法只会搜索出第一个满足要求的节点。这两个方法的参数是一模一样的。
得到一个节点以后,我们就可以访问节点的名称、属性、文字,相应的,在搜索节点的时候,我们也可以按照节点名称进行搜索,按照节
点的属性进行搜索,或按照节点的文字进行搜素,这里将节点内容分为名称、属性、文字。
我们举例说明。
下面是网页上一个链接:
<a href=’123.html’ class=’article_link’> python </a>
针对这样的链接我们怎样搜索它呢?
按照节点名称:a
节点属性:href = ‘123.html’
节点属性:class=‘article_link’
节点内容:python
使用这三种方式,可以进行搜索和访问
对应代码:
首先创建beautifulSoup对象,from bs4 import BeautifulSoup。
根据下载好的HTML网页字符串创建BeautifulSoup对象。
我们可以传入三个参数:
Soup = {
html_doc, #html文档字符串
‘html.parser’, #html解析器
from_encoding=’utf-8’ #html文档的编码
}
如果网页的编码和代码的编码不一致的话,解析过程中会出现乱码。这里可以对编码进行指定。
通过这种方式,我们就创建了bs对象,并且下载好了这个dom。
其次,搜索节点(find_all , find)
#方法:find_all(name, attrs, string) 节点名称、节点属性、节点文字
#查找所有标签为a的节点
Soup.find_all(‘a’)
#查找所有标签为a,链接符合/view/123.htm形式的节点
Soup.find_all(‘a’,href=’/view/123.htm’)
BS非常强大的地方是,对名字、属性、文字都可以传入一个正则表达式,来匹配对应的内容
Soup.find_all(‘a’,href=’re.compile(r’/view/\d+\.htm’))
#查找所有标签为div,class为adc,文字为python的节点
Soup.find_all(‘div’,class_=’adc’,string=’Python’)
为了避免和python冲突,将class后加下划线即:class_,
通过find_all, find两个方法就可以搜索dom中所有节点。
最后,得到节点以后就可以访问节点的信息。
比如:
#得到节点:<a href = ‘1.html’>python</a>
我们就可以获取查找到的节点的标签名称。Node.name
#获取查找到的节点的href属性
Node[‘href’] 以字典的形式可以访问到所有的属性。
#获取查找到的a节点的链接文字
Node.get_text()方法来获取文字
通过以上创建bs对象、搜索dom树、访问节点的内容,我们就可以实现对整个下载好的网页所有节点的解析和访问。
编写代码,测试bs这个模块的各种方法?
from bs4 import BeautifulSoup
import re
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p> <p class="story">...</p>
"""
print('获取所有的链接')
links = soup.find_all('a')
for link in links:
print(link.name,link['href'],link.get_text()) print('获取lacie的链接')
link_node = soup.find('a',href='http://example.com/lacie')
print(link_node.name,link_node['href'],link_node.get_text()) print('正则匹配')
link_node = soup.find('a',href=re.compile(r"ill"))
print (link_node.name,link_node['href'],link_node.get_text()) print('获取P段文字')
p_node = soup.find('p',class_='title')
print(p_node.name,p_node.get_text())
Python 开发轻量级爬虫07的更多相关文章
- Python 开发轻量级爬虫08
Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...
- Python 开发轻量级爬虫06
Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...
- Python 开发轻量级爬虫05
Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...
- Python 开发轻量级爬虫04
Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...
- Python 开发轻量级爬虫03
Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...
- Python 开发轻量级爬虫02
Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...
- Python 开发轻量级爬虫01
Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...
- Python开发轻量级爬虫
这两天自学了python写爬虫,总结一下: 开发目的:抓取百度百科python词条页面的1000个网页 设计思路: 1,了解简单的爬虫架构: 2,动态的执行流程: 3,各部分的实现: URL管理器:p ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
随机推荐
- JavaScript indexOf() 方法 和 lastIndexOf() 方法
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索. 语法: in ...
- 【转】js实现复制到剪贴板功能,兼容所有浏览器
两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...
- 第二次团队作业——预则立&&他山之石
Deadline: 2016.10.16 22:00pm 一.确立团队选题,建立和初步熟悉团队git的协作方式.项目后续的代码.文档都要通过github增量式管理.实现文档的版本化和增量式管理. 二. ...
- 深入理解图优化与g2o:g2o篇
内容提要 讲完了优化的基本知识,我们来看一下g2o的结构.本篇将讨论g2o的代码结构,并带着大家一起写一个简单的双视图bundle adjustment:从两张图像中估计相机运动和特征点位置.你可以把 ...
- ListView的联动实现
情景: ListView中,如果业务需要在点击position为1的item是,将position=1的itemView背景设置为Green:其他的设置为white 如何实现? 实现方案: 通过onI ...
- Nginx简易配置文件(二)(反向代理)
user nobody nobody; worker_processes 4; error_log logs/error.log; pid logs/nginx.pid; events { use e ...
- OSI参考模型及各层功能,TCP与UDP的区别
OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...
- Simple Network Management Protocol - SNMP Tutorial
30.9 Simple Network Management Protocol Network management protocols specify communication between t ...
- c# 网络
http://www.cnblogs.com/fuchongjundream/p/4079128.html http://stackoverflow.com/questions/21728773/th ...
- IntersectionObserver API
温馨提示:本文目前仅适用于在 Chrome 51 及以上中浏览. 2016.11.1 追加,Firefox 52 也已经实现. 2016.11.29 追加,Firefox 的人担心目前规范不够稳定,未 ...