# 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. 下载 nasm for win64

    下载nasm https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 以管理员身份运行安装.

  2. while 循环 continue break 用法例子

    py2 temp = "理解" # utf- 8 #解码, 需要指定原来的是什么编码 temp_unicode = temp.decode("utf-8") # ...

  3. Python学习日记(八)—— 模块一(sys、os、hashlib、random、time、RE)

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  4. this关键字的用法小结

    1.this :指它所在函数所属对象的引用. 简单说:哪个对象调用this所在的函数,this就指哪个对象. 主要是为了区分:成员变量和局部变量 2.构造函数之间的调用用this关键字,如,this( ...

  5. jenkins之插件下载失败

    1.更换地址 将默认地址 http://updates.jenkins-ci.org/update-center.json 改为 http://mirrors.jenkins-ci.org/statu ...

  6. Spring Boot 中 Druid 的监控页面配置

    Druid的性能相比HikariCp等其他数据库连接池有一定的差距,但是数据库的相关属性的监控,别的连接池可能还追不上,如图: 今天写一下 Spring Boot 中监控页面的配置,我是直接将seat ...

  7. Leetcode题目300.最长上升子序列(动态规划-中等)

    题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...

  8. Ubuntu18.04 桌面系统的个人吐槽(主要是终端)

    装了Ubuntu18.04,桌面换风格了,使用中最大的感觉是终端切换非常反人类,可能是我还没有摸清门路.原先习惯用Alt+Tab快捷键切不同终端以及不同窗口的,现在Alt+Tab时多个终端会归成一个图 ...

  9. 在SQLAlchemy ORM中动态变更表名

    在开发过程中,经常会遇到几张表结构相同,仅仅表名不一样.这在直接使用SQL语句进行查询的环境中处理起来很简单,但如果使用了SQLAlchemy ORM之后,因在model定义时就确定了表名,就需要用其 ...

  10. pycharm2019没有database问题(关于社区版)

    原文链接:https://blog.csdn.net/BlacK_CaT_/article/details/53884806网上教程都是直接打开右上角的database,但是我死活也没找到,后来发现应 ...