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. ie与火狐中常见的一些兼容问题

    1. document.form.item 问题 (1)现有问题: 现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在Fi ...

  2. 使用属性动画 — Property Animation

    属性动画,就是通过控制对象中的属性值产生的动画.属性动画是目前最高级的2D动画系统. 在API Level 11中添加.Property Animation号称能控制一切对象的动画,包括可见的和不可见 ...

  3. outlook 2016 for windows 每次刷新发送接收邮件会弹出登陆界面

    Q: outlook2016 for windows 每次刷新发送接收邮件会弹出登陆界面,office365 ProPlus 都是正常激活了,Word 和Excel都不存在此类问题 A: 排除用户的o ...

  4. redis-设置密码

    1.通过配置文件设置密码 找到redis的安装目录中的如下文件 linux:/etc/redis.confwindows(我的windwos免安装版本):E:\redis\redis-2.4.5-wi ...

  5. sharedUserId

    android:sharedUserId sharedUserId的作用是让两个应用程序共享一个user id,我们都知道linux进程给每一个应用程序分配了一个独立的user id,所以如果两个或多 ...

  6. sql 关于查询时 出现的 从数据类型 varchar 转换为 numeric 时出错 的解决方法。

    出现这种问题 一般是查询时出现了 varchar 转 numeric 时出了错  或varchar字段运算造成的 解决方法: 让不能转的数不转换就可以了 sql的函数有个isNumeric(参数) 用 ...

  7. 冰冻三尺非一日之寒-socket

    第八章 Socket语法及相关 SocketServer实现多并发 socket概念: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket又称&q ...

  8. 对dom的理解

    js对dom的操作可以理解为: 增.删.改.查 获取对象:查 对象操作:增,修,删 内容操作:innerHTML,innerText等 事件操作:mouse,key 样式操作:id,tag,class ...

  9. 【poj1737】 Connected Graph

    http://poj.org/problem?id=1737 (题目链接) 题意 求n个节点的无向连通图的方案数,不取模w(゚Д゚)w Solution 刚开始想了个第二类斯特林数,然而并不知道怎么求 ...

  10. linux下常见解压缩命令

    linux下常见的压缩文件格式有tar.gz.tar.gz.tar.bz2.zip等等.对于不同的压缩文件格式有对应的解压缩命令.下面就对此小结一下: 1.后缀为.tar 用 tar –xvf 解压 ...