python 爬虫 Advanced HTML Parsing

1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能是像下面这样的

  <span class="green" ></span> <span class="red"></span>

通过标签的class我们的程序能够简单的将他们分辨开来。

 from urllib.request import urlopen
from bs4 import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsObj = BeautifulSoup(html,"html.parser") nameList = bsObj.find_all("span",{"class":"green"})
for name in nameList:
print(name.get_text())

运行上面的脚本会将所有class为green的标签找出来,并且打印出来他们的context

    I  find_all方法:

find_all(name,attrs,recursive,text,**kwargs)

   name参数:用来查找名字为name的标签,字符串对象会被忽略掉。这个name参数的值可以使用任意一种过滤器:

1. 字符串,在查找方法中BeautifulSoup会查找与字符串完全匹配的内容

     soup.find_all('span')

2. 正则表达式,BeautifulSoup会通过正则表达式的match来匹配内容

      soup.find_all(re.compile("b")) # body b

3 列表:如果传入的是列表,beautifulSoup会将列表中所有元素匹配返回

      soup.find_all(['a','b'])

4 True,返回所有标签

5 方法,如果没有合适的过滤器还可以定义一个方法,这个方法只能接受一个参数,如果方法返回为True表示当前元素匹配并且被找到,如果不是返回false

 def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
bsObj.find(has_class_but_no_id)

keyword参数:

如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当做指定名字的标签的属性来搜索

其实这章主要是对BeautifulSoup的介绍:详细信息可见

    soup.find_all(id='link2')

soup.find_all(href=re.compile("slsie"))

    soup.find_all(id = True)所有有id的标签

搜索指定名字的属性可以是  字符串 正则表达式 列表 True

    使用多个指定名称参数同时过滤

    soup.find_all(href=re.compile("elsie"),id="link")

有些tag的属性不能够在搜索中使用 比如data-*

 data_soup = BeautifulSoup('<div data-foo="value">foo!</div>')
data_soup.find_all(data-foo="value")
# SyntaxError: keyword can't be an expression

    text参数:

    通过text参数可以搜搜文档中字符串的内容,和name的使用方式基本一样

limit参数:

    find_all返回全部的搜索结果,如果文档树很大,那么搜索的结果会比较慢可以使用limit控制返回的数量

    revursive参数

    调用find_all的时候会搜索当前所有的子孙节点,如果只想搜索直接子节点使用recursive=False

II find方法

   find方法和find_all方法在使用上基本相同,find返回一个标签find_all返回一个标签列表

在找的值为空的情况下find_all返回一个空列表find返回None

python 爬虫(二)的更多相关文章

  1. Python爬虫二

    常见的反爬手段和解决思路 1)明确反反爬的主要思路 反反爬的主要思路就是尽可能的去模拟浏览器,浏览器在如何操作,代码中就如何去实现;浏览器先请求了地址url1,保留了cookie在本地,之后请求地址u ...

  2. Python 爬虫二 requests模块

    requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...

  3. Python爬虫(二十一)_Selenium与PhantomJS

    本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,更多内容请参考:Python学习指南 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试 ...

  4. python爬虫(二)--了解deque

    队列-deque 有了上面一节的基础.当然你须要全然掌握上一节的全部方法,由于上一节的方法.在以下的教程中 会重复的用到. 假设你没有记住,请你返回上一节. http://blog.csdn.net/ ...

  5. python爬虫(二)_HTTP的请求和响应

    HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...

  6. Python爬虫(二十四)_selenium案例:执行javascript脚本

    本章叫介绍如何使用selenium在浏览器中使用js脚本,更多内容请参考:Python学习指南 隐藏百度图片 #-*- coding:utf-8 -*- #本篇将模拟执行javascript语句 fr ...

  7. Python爬虫(二十三)_selenium案例:动态模拟页面点击

    本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import unittest from selenium impor ...

  8. Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

    本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from sel ...

  9. Python爬虫(二十)_动态爬取影评信息

    本案例介绍从JavaScript中采集加载的数据.更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import t ...

  10. Python 爬虫(二十五) Cookie的处理--cookielib库的使用

    Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持. 该模块主要功能是提供可存储cookie的对象.使用此模块捕获cookie并 ...

随机推荐

  1. C# 反射研究

    概念 反射这东西,对于我这种小白,听起来总是觉得好大上的. 当初理解它费了一点时间,后来看了一句话,突然恍然大悟,“反射就跟B超一样,我们在不剖开人体的情况下想看清楚内部情况, 我们就通过发射超声波, ...

  2. HTC vive开发:关于手柄按键

    一.关于左右手柄的对应关系 两个手柄和SteamVR_TrackedObject.EIndex是对应的,一个是EIndex.Device2,另一个是EIndex.Device3(有编号的那个) 在场景 ...

  3. CentOs 6.5 安装Ganglia步骤

    一 . 说明 Ganglia由gmond.gmetad和gweb三部分组成 gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要收集指标数据的节点主机上.g ...

  4. socket.io简单入门(一.实现简单的图表推送)

    引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主 ...

  5. This is US 我们的生活

    温情暖心剧 看点在于真实,能让人找到不少共鸣像极了平淡而操蛋的生活,不断交织着苦涩和甘甜,柴米油盐.酸甜苦辣.嬉笑打闹.悲欢离合.温情又不尽如人意 this is us,our life 生活有如柠檬 ...

  6. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  7. [ActiveMQ]初识ActiveMQ

    初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:htt ...

  8. Xcode LLDB 调试Tips

    1.  bt -- 显示当前线程调用堆栈 2.  e -- 执行表达式,动态修改当前线程变量的值 3.  frame variable -- 打印当前堆栈所有变量值 4.  expr -O --lan ...

  9. Mac挂载NTFS移动硬盘读取VMware虚拟机文件

    一.Mac 挂载NTFS移动硬盘进行读写操作 (Read-only file system) 注意如下图所示先卸载,然后按照下图的命令进行挂载.然后cd /opt/003_vm/   &&am ...

  10. 基于TXT文本的简单图书管理系统

    1 ////////////////////////////////////////////////////////////////////////////////////// //SqList.h ...