复杂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 具有自我描述性,更 ...
随机推荐
- CentOS6.6 VSFTP服务器安装设置
1:安装vsftpd yum install vsftpd 2:关闭防火墙 service iptables stop 3:允许21端口通行 vi /etc/sysconfig/iptables ...
- C#计数器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- IPv6 Tunnel Broker+ROS搭建6TO4(IPV6)网络
准备条件:1.公网IPV4的IP2.ROS+IPV6的DHCP,本测试在ROS6.24版本下测试通过3. IPv6 Tunnel Broker:https://www.tunnelbroker.net ...
- PHP调用OCX控件的具体方法
需要设置php.ini文件,找到这行com.allow_dcom=true,把com组件支持启用 使用PHP调用OCX控件,本不是个难题,但现实中采用flash回避的方法更通用.真正使用ocx的不多, ...
- oracle完全删除表空间
步骤一: 删除user drop user ×× cascade 说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的. 步骤二: 删除 ...
- vconsole使用
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- [RHEL7.1]关闭防火墙及SElinux
一.关闭防火墙 1. 先查看防火墙状态 [root@bogon ~]# 1 systemctl status firewalld firewalld.service - firewalld - dyn ...
- linux 单网卡来绑定多IP实现多网段访问以及多网卡绑定单IP实现负载均衡
ifconfig eth0 hw AA:BB:CC:DD:EE:FF
- ES6系列_8之函数和数组
1.对象的函数解构 ES6为我们提供了这样的解构赋值使在前后端分离时,后端返回来JSON格式的数据,前端可以直接把这个JSON格式数据当作参数,传递到函数内部进行处理.比如: let json = { ...
- MYSQL, REDIS 等数据库的介绍
MySQL: 数据库概述 MySql安装和基本管理 MySQl创建用户和授权 初始mysql语句 库的操作 表的操作 数据类型 数据类型(2) 完整性约束 外键的变种 三种关系 数据的增删改 单表查询 ...