# 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. scrapy框架之基础

    一.安装scrapy 安装失败看博客>>>scrapy安装失败解决方案 pip install wheel pip install twisted pip install pywin ...

  2. Apache Web服务器 安装步骤 和遇到的坑

    Apache Web服务器是开发放源码的网页服务器,我们看到的网页都是上传到服务器然后呈现给用户的. 在开发中,在自己的电脑上安装Apache Web服务器,你的电脑也会成为服务器,配置文件,访问你的 ...

  3. redhat7.4安装git(按照官网从源码安装)

    按照官方文档建议使用源码安装 1.为什么不用yum安装 yum安装确实简单,只用一行命令就可以了,但是yum安装的版本太低. //安装前使用info查看git版本信息等 yum info git yu ...

  4. 游览器中javascript的执行过程

    在讲这个问题之前,先来补充几个知识点,如果对此已经比较了解可以直接跳过 大多数游览器的组件构成如图 在最底层的三个组件分别是网络,UI后端和js解释器.作用如下: (1)网络- 用来完成网络调用,例如 ...

  5. java批量修改指定目录下的文件名

    package io; import java.io.File; import java.io.IOException; /** * @Auther: Code * @Date: 2018/9/9 1 ...

  6. jQuery的html()、text()和val()的使用和区别

    .html():读取和修改一个元素的HTML内容 .text():读取和修改一个元素的文本内容 .val():读取和修改一个表单元素的value字段值

  7. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化

    把resource拷贝到test目录下 只保留文件夹结构和test1.ftl这个模板文件就可以了. 新建一个包 编写测试类 使用freemaker提供的方法生成静态文件 Configuration是i ...

  8. bs4笔记

    1.网页输出乱码的解决办法 r= requests.get('https://www.baidu.com/') r.encoding = 'gbk2312'   #有可能 gbk.utf-8 soup ...

  9. Docker 实践备忘录

    平时零散的接触docker,时间久了概念和命令都会忘了,所以集中记下: docker 目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC)等技术 docker ...

  10. SpringBoot: 14.异常处理方式4(使用SimpleMappingExceptionResolver处理异常)(转)

    修改异常处理方法3中的全局异常处理Controller即可 package bjsxt.exception; import org.springframework.context.annotation ...