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章 课程介绍 ...
随机推荐
- 在线文档预览方案-office web apps续篇
上一篇在线文档预览方案-office web apps发布后收到很多网友的留言提问,所以准备再写一篇,一来介绍一下域控服务器安装,总结一下大家问的多的问题,二来宣传预览服务安装与技术支持的事情. 阅读 ...
- IT职场人的“存在主义”
人生在世,最重要的一条就是:找准你的位置.也就是,你的定位问题. 就在前两天,参加一次社交活动,一知名培训师回顾过往,感慨地说:一个好的培训师,一定要定位好自己的客户群,根据他们的需求做好自己的定 ...
- linux基础知识与技能2
3.编辑器vi的使用(vi和vim的联系)什么是编辑器?编辑器就是一款软件,它的主要作用就是用来编辑.譬如编写文件,编写代码.Windows中的常用编辑器,如自带的notepad.比较好用的notep ...
- spring-poi-excle往单元格写入图片
HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现 在POI中有HSSFPat ...
- Asp.Net通过HttpModule实现URL重写
首先总结一下为什么要对URL进行Rewrite,比如我可以把/Default.aspx?param=3替换成/Home/Default/3(类似mvc). 一.缩短url,隐藏实际路径提高安全性; 二 ...
- Android相关学习资料整理
小项目 2015-1-17 记事本 记事本 学习笔记: 结构清晰,简单易懂 2015-1-24 蘑菇街 仿蘑菇街 学习笔记:写博客的一种态度,讲解,配图,代码都很完善,值得学习 相机开发 学习笔记:思 ...
- WPF基础到企业应用系列6——布局全接触
本文转自:http://knightswarrior.blog.51cto.com/1792698/365351 一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows ...
- android 手机去哪儿7.2版本客户端 账号存储信息分析
1.data/data/com.qunar sharepref 文件夹下的Qunarperferences.xml文件中 username,phone等均为加密处理过字段 2.jdgui下查找关键 ...
- Win10---------专区
待完善中---------------------------------- -----------------------------------------The End------------- ...
- Win7中怎么不经确认直接删除文件至回收站
Win7中怎么不经确认直接删除文件至回收站.. 1.双击桌面回收站的图标,进入回收站后,在空白处点击右键,选择属性:2.在回收站的属性对话框,最下边,把"显示删除确认对话框”前边的√去掉,应 ...