# P29/9
# 解析,要考虑到可持续性问题,对方反爬修改后,仍继续有效,方为优秀代码
# 解析一个目标网页前,需要做到以下几点:
(1)明确目标内容;
(2)寻找“打印此页”的链接,或查看网站有无HTML样式更友好的移动版(把自己的请求头设置为处于移动设备的状态,后接收网站移动版,更多见第12章)
(3)寻找隐藏在JavaScript文件中的信息;
(4)寻找网页标题(常用),有时也可从URL中获取;
(5)思考,你需要找的数据,有没有其他网站可以提供?多源
 from urllib.request import urlopen
from bs4 import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html") # 此处有报警,pass the additional argument 'features="lxml"' to the BeautifulSoup constructor
# 参考:https://stackoverflow.com/questions/50045775/lxml-beautifulsoup-parser-warning
bsobj = BeautifulSoup(html,features="lxml") # 找出所有该标签及对应的内容,存在一个列表[,,,]里面
namelist = bsobj.findAll("span",{"class":"green"}) print(namelist) for name in namelist:
# 用name变量,遍历namelist[]中所有元素,并去除tag中包含的文本内容
print(name.get_text())

更多关于BeautifulSoup的文档,一定要看!!!参见链接

Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有的对象归纳起来有4种,分别是:Tag,NavigableString,BeautifulSoup,Comment。

核心知识点:

(1)用 .get_text() 进行格式化输出,.get_text()只输出tag及子孙tag中的文本内容

(2).find()及 .findAll()函数

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

  tag,标签参数,可传一个标签的名称或多个标签的名称,组成Python列表,作为标签参数。

  .findAll({"h1","h2","h3","h4"})

  attributes,属性参数,用Python字典封装一个标签的若干属性和对应的属性值。

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

  recursive,递归参数,是一个布尔变量。如果设置为TRUE(默认参数),则查询标签参数的所有子标签,以及子标签的子标签,如果为FALSE,只查找文档的一级标签(相当于 .find()函数)。

后续 “导航树”。。。

20190716-Python网络数据采集/第 2 章 复杂HTML解析的更多相关文章

  1. 20190724-Python网络数据采集/第 2 章 复杂HTML解析-导航树/正则表达式

    1. 导航树 经典的HTML树状结构 直接看下面的代码示例:(注意目标网页的标签大小写等细节,易出bug) from urllib.request import urlopen from bs4 im ...

  2. 20190715《Python网络数据采集》第 1 章

    <Python网络数据采集>7月8号-7月10号,这三天将该书精读一遍,脑海中有了一个爬虫大体框架后,对于后续学习将更加有全局感. 此前,曾试验看视频学习,但是一个视频基本2小时,全部拿下 ...

  3. Python网络数据采集PDF

    Python网络数据采集(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/16c4GjoAL_uKzdGPjG47S4Q 提取码:febb 复制这段内容后打开百度网盘手 ...

  4. Python网络数据采集PDF高清完整版免费下载|百度云盘

    百度云盘:Python网络数据采集PDF高清完整版免费下载 提取码:1vc5   内容简介 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第 ...

  5. 笔记之Python网络数据采集

    笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...

  6. Python网络数据采集7-单元测试与Selenium自动化测试

    Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...

  7. Python网络数据采集6-隐含输入字段

    Python网络数据采集6-隐含输入字段 selenium的get_cookies可以轻松获取所有cookie. from pprint import pprint from selenium imp ...

  8. Python网络数据采集4-POST提交与Cookie的处理

    Python网络数据采集4-POST提交与Cookie的处理 POST提交 之前访问页面都是用的get提交方式,有些网页需要登录才能访问,此时需要提交参数.虽然在一些网页,get方式也能提交参.比如h ...

  9. Python网络数据采集3-数据存到CSV以及MySql

    Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...

随机推荐

  1. input输入框限制只能输入数字

    js: function onlyNumber(event){     var keyCode = event.keyCode;     if((keyCode<48&&keyC ...

  2. [BJOI2019]送别——非旋转treap

    题目链接: [BJOI2019]送别 我们将每段墙的每一面看成一个点,将每个点与相邻的点(即按题中规则前进或后退一步能走到的点)连接.那么图中所有点就形成了若干个环,而添加一段墙或删除一段墙就是把两个 ...

  3. super关键字和调用父类构造方法

    表示父类对象的默认引用 如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法. 使用super调用父类方法 使用super调用父类的构造方法 调用构造方法 本类中调用另 ...

  4. python+Django+mysql环境搭建

    为什么我的毕业设计还要用到网站啊啊啊啊.什么鬼啊,又要做爱拍拍又要做网站???饶了我啊..我选择狗带.. 网站就用django做吧,毕竟之前做过一个电脑销售网站,希望能借鉴一下经验什么的,不要一切从头 ...

  5. zookeeper源码 — 五、处理写请求过程

    目录 处理写请求总体过程 客户端发起写请求 follower和leader交互过程 follower发送请求给客户端 处理写请求总体过程 zk为了保证分布式数据一致性,使用ZAB协议,在客户端发起一次 ...

  6. qt ui

    /******************************************************************************** ** Form generated ...

  7. linux简单命令7--管道符和通配符

    ”&&“和管道符“|”不一样. ---------------------------------------------------------通配符---------------- ...

  8. 本地文件上传到Linux服务器

    1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地目录) 例如scp root@192.168.0.101: ...

  9. haproxy报错解决

    .有一次访问出现 错误 http://192.168.0.200:10080 haproxy service unavailable no server is avaible to handle th ...

  10. Product - 产品经理 - 知返

    特别说明 本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达. - ISBN: 9787568041591 - https://book.douban. ...