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章 课程介绍 ...
随机推荐
- 微信小程序之本地缓存(十)
[未经作者本人同意,请勿以任何形式转载] 目前,微信给每个小程序提供了10M的本地缓存空间(哎哟妈呀好大) 有了本地缓存,你的小程序可以做到: 离线应用(已测试在无网络的情况下,可以操作缓存数据) 流 ...
- C# 如何生成一个时间戳
在程序中,常常会用到时间戳,如何生成一个时间戳呢? /// <summary> /// 获取时间戳 /// </summary> /// <returns>< ...
- 前台checkbox复选框提交到后台处理
前台 <input type="hidden" id="tempString" name="tempString" /> < ...
- 内存溢出VS内存泄漏
内存溢出是指用户在对其数据缓冲区操作时,超过了其缓冲区的边界,尤其是对缓冲区进行写操作缓冲区的溢出很可能导致程序的异常. 内存泄露是指程序在运行过程中动态申请的内存空间不再使用后没有及时释放,从而很可 ...
- windows 下 新建 点开头的文件和文件夹
新建 .aaa文件夹 cmd:$ mkdir .aaa 新建 .aaa文件夹 echo " >> .aaa
- red hat关于桥接模式连不上外网或者没有IP
很多人·在启动虚拟机后连接不上外网,即ifconfig没有ip地址,我总结了一下需要注意的地方: 以下全是在桥接模式. 1.在windows中打开任务管理器-->服务中找到一下几个服务,确保它们 ...
- C#对文件/目录的操作:Path、File、Directory、FileStream、StreamReader、StreamWriter等类的浅析
以下类的命名空间都是:System.I/0; 一.Path:主要对文件路径的操作! 常用方法: String path=@"C:\a\b\c\123.txt"; 1-1.Path. ...
- 使用spring注解@Controller @Service @Repository简化配置
前言:在web项目中引入spring框架中的配置文件,我们给每一个java bean进行相关配置可以非常安全,便捷的管理我们的bean.那么,问题来了,如果一个项目中所涉及到的java bean十分庞 ...
- 开发unity DLL插件
最近开发一款设备的SDK,想着要开发unity版本,怎么做呢?首先想到的就是在外部编写相关的驱动程序然后集成成几个dll作为unity的SDK使用了.So,我就开始了unity外部插件的研究之旅了. ...
- Fedora 23安装 NS2 (network simulator 2)
1 实验环境 OS: Fedora 23 workstation 2 实验步骤 ( 参考了:http://www.isi.edu/nsnam/ns/ns-build.html) 本次实验的实验环境: ...