《Python网络数据采集》读书笔记(二)

1、通过的名称和属性查找标签

和之前一样,抓取整个页面,然后创建一个BeautifulSoup对象。这里面“lxml”解析器需要另外下载。

pip3 install lxml
>>> from urllib.request import urlopen
>>> from bs4 import BeautifulSoup
>>> html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
>>> bsObj = BeautifulSoup(html, "lxml")

finAll()可以获取页面中所有指定的标签,抽取只包含在<span class="green"></span>标签里的文字,这样就会得到一个人物名称的列表。.get_text()会把所有的标签都清除,返回一个只包含文字的字符串。

>>> nameList = bsObj.findAll("span", {"class":"green"})
>>> for name in nameList:
        print(name.get_text())

2、详解finAll()和find()的参数

findAll(tag, attributes, recursive, text, limit, keywords)

find(tag, attributes, recursive, text, keywords)

tag--可以传一个标签的名称或多个标签名称组成的列表做参数;如下示例将返回一个包含HTML文档中所有标题标签的列表

>>> bsObj.findAll({"h1", "h2", "h3", "h4", "h5", "h6"})
[<h1>War and Peace</h1>, <h2>Chapter 1</h2>]

attributes--字典封装一个标签的若干属性和对应的属性值;如下示例会返回HTML文档里红色与绿色两种颜色的span标签

>>> bsObj.findAll("span", {"class":{"green", "red"}})

recursive--布尔变量(默认为True)查找标签参数的所有子标签,及子标签的子标签;为False时,只查找文档的一级标签

text--是用标签的文本内容去匹配;如下示例作用是查找网页中包含“the prince”内容的标签数量

>>> nameList=bsObj.findAll(text="the prince")
>>> print(len(nameList))
7

limit--按照网页上的顺序排序,获取的前 x 项结果(等于1时等价于find)

keywords--可以让你选择那些具有指定属性的标签

>>> allText = bsObj.findAll(id="text")
>>> print(allText[0].get_text())

下面两行代码是完全一样的

bsObj.findAll(id="text")
bsObj.findAll("", {"id":"text"})

由于class为关键字,使用keywords指定时需要多加一个下划线

bsObj.findAll(class_="green")
bsObj.findAll("", {"class":"green"})

3、BeautifulSoup对象

BeautifulSoup对象:如前面代码示例中的bsObj

Tag对象:BeautifulSoup对象通过find和findAll或直接调用子标签获取的一列象或单个对象(如bsObj.div.h1)

NavigableString对象:表示标签里的文字

Comment对象:查找 HTML 文档的注释标签

4、标签解析树的导航:通过标签在文档中的位置来查找标签。

处理子标签与后代标签:

子标签(child)是一个父标签的下一级。

后代标签(descendant)是指一个父标签下面所有级别的标签。

同样的

>>> from urllib.request import urlopen
>>> from bs4 import BeautifulSoup
>>> html = urlopen("http://www.pythonscraping.com/pages/page3.html")
>>> bsObj = BeautifulSoup(html, "lxml")

只想找出子标签,可以用.children;如下示例会打印giftList表格中所有产品的数据行(如使用.descendants将打印出二十几个标签)

>>> for child in bsObj.find("table", {"id":"giftList"}).children:
print(child)

处理兄弟标签:

next_siblings和previous_siblings将返回一组标签

next_sibling和previous_sibling将返回单个标签

如下示例会打印产品列表里除第一行外的所有行的产品

>>> for sibling in bsObj.find("table", {"id":"giftList"}).tr.next_siblings:
        print(sibling)

处理父标签:

parent 和 parents

如下示例会打印出指定图片对应的商品价格

>>> print(bsObj.find("img", {"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
$15.00

原文地址:http://blog.51cto.com/9473774/2092737

时间: 2024-10-14 17:11:24

《Python网络数据采集》读书笔记(二)的相关文章

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

大型网站技术架构--核心原理和案例分析 大型网站架构演化(一)

如果把上世纪90年代CERN正式发布web标准和第一个WEB服务的出现当作互联网的开始,那么互联网站的发展之经历了短短20多年的时间.在20多年的时间里,互联网的世界发生了变化,今天,全球有近一半的人口使用互联网,人们的生活因为互联网而产生了巨大的变化.从信息检索到即使通信,从电子购物到文化娱乐,互联网渗透到生活的每一个 角落,而且这种趋势还在蔓延.因为互联网,我们的世界正变得越来越小. 同时我们也看到,在互联网跨越式发展进程中,在电子商务火热的市场背后却是不堪重负的网站架构.某些B2C网站逢促

《大型网站技术架构核心原理与案例分析》阅读笔记-01

通过阅读该书籍我们能够更加清楚的树立大型网站的的技术发展历程,剖析大型网站技术架构模式,深入的讲述大型互联网架构核心原理,并通过一些典型的技术案例来讲述大型网站开发全景视图,该书籍深入的阐述了各种大型网站面临的各种架构问题及解决方案. 在第一章第一篇大型网站架构演化中了解到与传统企业应用系统相比,大型互联网应用系统具有高并发大流量.高可用性.海量数据.用户分布广泛,网络情况复杂.安全环境恶劣.需求快速变更,发布频繁.渐进式发展等特点:大型网站架构演化发展历程经历了初始阶段的网络架构它的应用程序.

大型网站技术架构-核心原理与案例分析

阿里系的书,也是讲大型网站系统架构的,平常我们总是挂在嘴边的高性能.高可用.易扩展.安全性,这些所谓的系统非功能性指标到底如何实现,书里面讲了这些干货,作为网站架构师或者哪怕是应用系统的架构师,都值得了解,也许不一定都能用上,但是等需要用的那天,你肯定不会迷茫. 1.大型网站架构发展常见历程:应用/数据库分离--->使用缓存--->应用服务器集群--->数据库读写分离--->CDN及反向代理--->使用分布式文件系统和分布式数据库--->NoSQL及搜索引擎--->

【大型网站技术架构 核心原理与案例分析】读书笔记

章节 笔记 1.概述 网站架构模式:分层.分割.分布式.集群.缓存.异步.冗余.自动化.安全. 核心架构要素:性能.可用性.伸缩性.扩展性.安全. 4.高性能 一般重复请求一万次计算总响应时间然后除以一万得到单词响应时间. 测试程序并不是启动多线程然后不停发送请求,而是在两次请求之间加入一个随机等待时间. 吞吐量:每天通过收费站的车辆数目:并发数:正在行驶的车辆数目:响应时间:车速.TPS:每秒事务数:HPS:每秒请求数:QPS:每秒查询数. 性能计数器:System Load(系统负载,最理想

大型网站技术架构-核心原理与案例分析-阅读笔记4

在第四章案例章节中的淘宝网的架构演化案例分析小节中作者主要分析了淘宝架构的演化,以淘宝网的实例给我们分析介绍了淘宝网的业务发展历程及淘宝网的技术架构演化两个方面,在业务发展中作者写到淘宝的技术是随着淘宝业务一起发展起来的,业务是推动这技术发展的动力,淘宝如今的规模和当初有很明显的变化,在技术架构演化中介绍了架构技术的更新升级,该章节中主要介绍淘宝网的发展的历程,在随着时间的发展不断中网站的架构不断的引用着新的技术,由最初简单的c2c更改过来的网站,放弃了lamp架构转而使用java作为开发平台并

大型网站技术架构-核心原理与案例分析-阅读笔记3

在第二章的架构章节中的 随机应变:网站的可拓展架构的篇章中作者介绍了构建网站的可扩展架构.利用分布式队列降低系统的耦合性.利用分布式可复用的业务平台.可拓展的数据结构.利用开放平台建设网站生态圈五个方面,作者在讲述前通过微信的成功发布及其中摇一摇功能的加入的开发的快捷引出来的,其中构建网站的可扩展架构中区分了扩展性和伸缩性的区别,讲到了低耦合性的系统跟容易扩展,并且更容易复用,一个低耦合性的系统也可以让系统更加容易的开发和维护,在如何降低系统的耦合性中,作者主要介绍用分布式消息队列的方法来降低系

大型网站技术架构-核心原理与案例分析-阅读笔记5

在第四章案例章节中的海量分布式存储系统Doris的高可用架构设计分析的小节中作者主要分析介绍了分布式存储的高可用架构和不同故障情况下的高可用解决两个方面,在两小节前作者给我们介绍了Doris是一个海量分布式KV存储系统,其设计的目的是支持中等规模高可用.可伸缩的Kv存储群.跟主流的NoSQL系统HBase相比,doris具有相似的性能和线性伸缩能力,并具有更好的可用性及更友好的图形用户管理界面.而在分布式存储的高可用架构的小节中作者给我们分析了Doris的整体架构,其系统整体上可分为应用程序服务

学习笔记8:《大型网站技术架构 核心原理与案例分析》之 固若金汤:网站的安全架构

一.网站攻击与防御 攻击: 1.XSS攻击:危险字符转义,HttpOnly 2.注入攻击:参数绑定 3.CSRF(跨站点请求伪造):Token,验证码,Referer Check 4.其他漏洞攻击 Error Code HTML 注释 文件上传 路径遍历 防御: 1.Web应用防火墙:ModSecurity 2.网站安全漏洞扫描 二.信息加密技术与密钥管理 1.单向散列加密 2.对称加密 3.非对称加密 4.密钥安全管理 三.信息过滤与反垃圾 1.文本匹配:正则,Trie算法,多级Hash,降噪