20190716-Python网络数据采集/第 2 章 复杂HTML解析
# 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解析的更多相关文章
- 20190724-Python网络数据采集/第 2 章 复杂HTML解析-导航树/正则表达式
1. 导航树 经典的HTML树状结构 直接看下面的代码示例:(注意目标网页的标签大小写等细节,易出bug) from urllib.request import urlopen from bs4 im ...
- 20190715《Python网络数据采集》第 1 章
<Python网络数据采集>7月8号-7月10号,这三天将该书精读一遍,脑海中有了一个爬虫大体框架后,对于后续学习将更加有全局感. 此前,曾试验看视频学习,但是一个视频基本2小时,全部拿下 ...
- Python网络数据采集PDF
Python网络数据采集(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/16c4GjoAL_uKzdGPjG47S4Q 提取码:febb 复制这段内容后打开百度网盘手 ...
- Python网络数据采集PDF高清完整版免费下载|百度云盘
百度云盘:Python网络数据采集PDF高清完整版免费下载 提取码:1vc5 内容简介 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第 ...
- 笔记之Python网络数据采集
笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...
- Python网络数据采集7-单元测试与Selenium自动化测试
Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...
- Python网络数据采集6-隐含输入字段
Python网络数据采集6-隐含输入字段 selenium的get_cookies可以轻松获取所有cookie. from pprint import pprint from selenium imp ...
- Python网络数据采集4-POST提交与Cookie的处理
Python网络数据采集4-POST提交与Cookie的处理 POST提交 之前访问页面都是用的get提交方式,有些网页需要登录才能访问,此时需要提交参数.虽然在一些网页,get方式也能提交参.比如h ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
随机推荐
- docker pull 报错Get https://xxx.xxx.xxx.xxx:5000/v1/_ping: http: server gave HTTP response
解决方法: vim /etc/docker/daemon.json { "insecure-registries":["xxx.xxx.xxx.xxx:5000" ...
- StringBuffer 拼写串
StringBuffer ssBuffer=new StringBuffer(); for (int i = 0; i < lista.size(); i++) { ssBuffer=ssBuf ...
- sql语句 基本
1.sql不区分大小写,一般结尾要加分号: 2.select 列,列,列 from 表 3.distinct ,返回列中不同的值.需要哪个列不同,关键词哪个列 4.where子句,select 列 f ...
- impdp导入报错ORA-39070:无法打开日志文件
>impdp test/123456@orcl directory=expnc_dir dumpfile=TEST.DMP full=y ORA-39002:操作无效 ORA39070:无法打开 ...
- windows下安装node.js及环境配置、部署项目
windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...
- python 度分秒转度
#必须是u类型==================u==================== by gisoracle def dmstod(dms): #arcpy.AddMessage(" ...
- Linux下批量ping某个网段的脚本
比如现在需要对192.168.0.0/24网段的ip进行检查,检查哪些ip现在被占用,哪些ip没有被占用,可以通过ping命令来检查,也可以通过nmap接参数来检查 ping命令脚本如下: [root ...
- MySQL中的sleep函数介绍
MySQL数据库中有一个不太常用但便于进行某些调试的函数:sleep(),今天我们就来介绍一下这个函数的用法. 首先,看看官网对于函数的定义: SLEEP(duration)Sleeps (pause ...
- iOS tableview的常用delegate和dataSource执行顺序
在这次项目中遇到了一个特别奇葩的问题:表视图创建的cell在7以上的系统能正常运行显示,在模拟器上就不能正常实现......为解决这个问题,纠结了好久...... 对在7系统上不显示的猜测: 用mas ...
- 使用graphviz绘制流程图
转自 http://www.cnblogs.com/CoolJie/archive/2012/07/17/graphviz.html