复杂HTML页面解析
1、层叠样式表CSS可以让html元素呈现出差异化,网络爬虫可以通过class属性的值,轻松分出不同标签
findAll函数通过标签的名称和属性来查找标签
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://pythonscraping.com/pages/warandpeace.html")
bs = BeautifulSoup(html)
namelist = bs.findAll("span",{"class":"green"})#bs.findAll(tagname,tagattributes)
for name in namelist:
print(name.get_text())#get_text()函数会将html文档中的所有标签都清除,只保留包含文字的字符串
下面两行代码是一致的
bs.findAll(id="text")
bs.findAll("",{"id"="text"})
2、通过导航树可以通过标签在文档中的位置来查找标签
在BeautifulSoup库中,子标签是父标签的下一级,而后代标签是指父标签下面所有级别的标签,库中一般是默认查找后代标签,如果只想要子标签,可以使用。children标签:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://pythonscraping.com/pages/page3.html")
bs = BeautifulSoup(html) for child in bs.find("table",{"id":"giftList"}).children:
print(child)
处理兄弟标签中next_sibling函数可以收集除了第一行表格标题之外的所有行的产品
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://pythonscraping.com/pages/page3.html")
bs = BeautifulSoup(html) for sibling in bs.find("table",{"id":"giftList"}).tr.next_siblings:
print(sibling)
3、偶尔使用父标签查找函数,parent和parents
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://pythonscraping.com/pages/page3.html")
bs = BeautifulSoup(html) print(bs.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
4、直接查找标签属性的话,比如标签<a>指向的URL链接包含在href属性中,<img>标签的图片文件包含在src属性中,可以使用以下代码获取全部属性
#maTag.attrs
maImgTag.attrs["src"]
5、正则表达式,下例中,直接通过商品图片的文件路径来查找信息。
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re#正则表达式
html = urlopen("http://pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html)
images = bsObj.findAll("imd",{"src":re.compile("\.\.\/img\/gifts\/img.*\.jpg")})
for image in images:
print(image["src"])
复杂HTML页面解析的更多相关文章
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Python的Web编程[0] -> Web客户端[1] -> Web 页面解析
Web页面解析 / Web page parsing 1 HTMLParser解析 下面介绍一种基本的Web页面HTML解析的方式,主要是利用Python自带的html.parser模块进行解析.其 ...
- Web页面解析过程(浅)
web页面流程 域名解析DNS 域名解析:把域名指向网络空间IP,让人们通过简单的域名访问Web网站的服务. DNS:域名系统 DNS服务器:记录着域名及其对应的IP地址 解析域名: 浏览器中输入 ...
- javascript应用:页面解析list和map封装后的json数据
开发web项目时,经常会使用到的页面脚本语言javascript,使用它能让页面展示上的效果更多彩. 今天就来说一下,从数据库中获取到数据后在页面上的展示方式: 1.数据库取出数据放入list< ...
- 网络爬虫(3)--Beautiful页面解析
前面2节中对页面内容的访问都是直接通过标签访问的,这样虽然也可以达到解析页面内容的目的,但是在网页复杂,页面结构发生变化时,爬虫就失效了.为了使爬虫能够更加鲁棒的工作,我们需要学习通过 ...
- Spring Boot 系列教程11-html页面解析-jsoup
需求 需要对一个页面进行数据抓取,并导出doc文档 html解析器 jsoup 可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操 ...
- springmvc中的页面解析器ViewResolver不起作用,变量输出字符串的解决方案
<web-app xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"> <servlet> <servlet ...
- web 安全之页面解析的流程学习
0x00 任务内容: 理解域名解析的整个过程 理解 web 页面请求的整个流程,绘制流程图(nginx 处理的 11 个过程) 学习 http 协议中的字段及含义 学习 http 请求方法以及返回状态 ...
- JSON后端页面解析
json-lib 请求: http://localhost:8080/MyWeb/pay?cmd=getUrl¶m={"OrderId":"sddd111 ...
- JSON前端页面解析
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更 ...
随机推荐
- PHP框架(如:laravel、yii2、thinkPHP5)中统一异常处理及统一日志打印
背景: 现在写接口服务应用有一个很通用的需求,想通过日志.或者监控的形式监测的接口的运行情况,比如耗时.请求参数.响应结果.和前端联调接口时或者排查线上问题时日志必不可少,特别是现场日志. 应用运行时 ...
- mysql-1安装和数据库的管理
1.安装 直接docker安装,客户端使用Navicat Premium. docker run -d --name csjmysql -p 3306:3306 -e MYSQL_ROOT_PASSW ...
- python 多态、多继承、函数重写、迭代器
用于类的函数 issubclass(cls,class_or_tuple) 判断一个类是否继承自其他的类,如果此类cls是class或tuole中的一个派生(子类)则返回True,否则返回False ...
- Apache Kylin本地启动
首先:kylin是一种Online Analytics Platform. kylin 在Apache的首页是http://kylin.apache.org/cn/. kylin git代 ...
- 并发服务器和HTTP协议
单进程服务器 1. 完成一个简单的TCP服务器 from socket import * serSocket = socket(AF_INET, SOCK_STREAM) # 重复使用绑定的信息 se ...
- Python/Java读取TXT文件
JAVA: public static void readTextFile(String filePath) { try { String encoding = "GBK"; Fi ...
- python的多线程编程之锁
1. 背景概述 在上篇文章中,主要讲述了python中的socket编程的一些基本方面,但是缺少关于锁的相关概念,从而在这篇文章中进行补充. 由于在python中,存在了GIL,也就是全局解释器锁,从 ...
- 「小程序JAVA实战」小程序数据缓存API(54)
转自:https://idig8.com/2018/09/22/xiaochengxujavashizhanxiaochengxushujuhuancunapi52/ 刚开始写小程序的时候,用户信息我 ...
- 13 MySQL--存储过程
1.存储过程的介绍 对于存储过程,可以接收参数,其参数有三类: in 仅用于传入参数用 out 仅用于返回值用 inout 既可以传入又可以当作返回值 存储过程包含了一系列可执行的sql语句,存储过程 ...
- VS Code设置中文和配置Python环境
前言: Visual Studio Code(以下简称VSCode)是一个轻量且强大的代码编辑器,支持Windows,OS X和Linux.内置JavaScript.TypeScript和Node.j ...