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的更多相关文章

  1. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  2. Python 开发轻量级爬虫06

    Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...

  3. Python 开发轻量级爬虫05

    Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...

  4. Python 开发轻量级爬虫04

    Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...

  5. Python 开发轻量级爬虫03

    Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...

  6. Python 开发轻量级爬虫02

    Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...

  7. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

  8. Python开发轻量级爬虫

    这两天自学了python写爬虫,总结一下: 开发目的:抓取百度百科python词条页面的1000个网页 设计思路: 1,了解简单的爬虫架构: 2,动态的执行流程: 3,各部分的实现: URL管理器:p ...

  9. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

随机推荐

  1. php $CI =& get_instance();

    初学php 看有人这样写,$CI =& get_instance(); 要你自定义的类库中访问CodeIgniter的原始资源,你必须使用 get_instance() 函数.这个函数返回一个 ...

  2. 物联网(莹石云)WIFI一键配置原理分析(zz)

    最近打算做一款自己的无线传输模块用来实现光伏电站的数据接入,希望可以尽量简化接入流程,其中wifi密码的配置就是一个比较麻烦的事情,想到最近使用萤石摄像头时,wifi密码配置似乎很简单,他们是怎么做到 ...

  3. JS组件系列——封装自己的JS组件,你也可以

    前言:之前分享了那么多bootstrap组件的使用经验,这篇博主打算研究下JS组件的扩展和封装,我们来感受下JQuery为我们提供$.Extend的神奇,看看我们怎么自定义自己的组件,比如我们想扩展一 ...

  4. Maven_profile_使用profile配置不同环境的properties(实践)

    配置方法分为以下几个步骤: 1.配置profiles节点(pom.xml) 2.配置build节点(pom.xml)--如果不配置该节点则无法找到profile中的properties属性值,并且配置 ...

  5. 使用CocoaPods开发并打包静态库

    Cocoapods作为OS X和iOS开发平台的类库管理工具,已经非常完善和强大.通常我们用pod来管理第三方开源类库,但我们也极有可能会开发一个用pod管理依赖关系的静态类库给其他人使用,而又不愿意 ...

  6. mysql-批量修改表字段中的某一部分内容

    MySQL批量替换指定字段字符串语句(1)updat 表名 set 字段名=replac(字段名,'原来的内容','替换后的内容') 举一个例子,就是我实际操作的时候的命令: update cpg14 ...

  7. 使用VS Code 从零开始开发并调试.NET Core 应用程序

    最新文章:http://www.cnblogs.com/linezero/p/VSCodeNETCore.html 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一 ...

  8. 红米3 SudaMod(android_6.01_r72)高配指纹/农历/归属地/SM天气/流畅运行/红外线正常/更新于20161025

    一.写在前面 我只是个人爱好,本ROM未集成任何第三方推广软件,我只是喜欢把好的资源分享出来,若可以,我们一起学习,一起进步. 请不要问我怎么刷机! 请不要问我玩游戏卡不卡(有钱你就换好点的手机)! ...

  9. Photon服务器进阶&一个新游戏的出产(三)

    下面或许该介绍介绍我用Photon写的一个4人联机麻将了~ 上图

  10. elasticsearch curl operation

    Elastic Search API Index.简单的介绍了使用Elastic Search 如何建立索引. ElasticSearch-API-Index 索引创建API允许初始化一个索引.Ela ...