题外话:

《Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元》相信过去BTC的人,信不信未来的PI,了解一下,唯一一个高度与之持平的项目

学了requests,了解了伪装技巧后,终于能爬到些比较正常的网页源码(html文档)了,但这离结果还差最后和是最重要的一步——筛选。这个过程就像在泥沙中淘金一样,没有合适的筛子,你就会把有价值的漏掉了,或者做了无用功把没用的也筛了出来。
淘金者看土质,做筛子。对应到爬虫领域就是观察html,定制筛选器

稍稍了解HTML

信息都在网页源码里,浏览器通过解析源码来加载我们所看到的东西,那我们是不是也应该学下如何看源码呢?——是的

但不要方,这不是html语法课,做爬虫的,只需了解一下html的原理和标签关系就行了,这跟认亲戚一样简单,你会看家族树的话根本不成问题。

示例html,足以解释所有节点关系。

  • <head><title>这些有尖括号的叫做标签(或节点),成对存在。<head><title>是标签名,标签间可以放字符串。
  • 标签可以拥有属性,属性在尖括号里,如title标签有名为lang的属性,属性值为"en"。
  • A节点被B节点包起来,A就是B的子,或B是A的父。如book和title都是是bookstore的子,但是book是bookstore的直接子(只有一层包含关系)
  • 有同一个直接父的标签互相为兄弟,如title,author,year,price互为兄弟。
<title><author></author><year></year><price></price>
</title>

好了,准备以下代码信息,用来练习获取内容:

from bs4 import BeautifulSoup

from bs4 import BeautifulSoup
#准备代码信息,用来练习获取内容
html ='''
<html>
<head><title>The Dormouse's story</title></head>
<body>
<h1><b>123456</b></h1>
<p class="title" name="dromouse"><b>The Dormouse's story</b>aaaaa
</p>
<p class="title" name="dromouse" title='new'><b>The Dormouse's story</b>a</p>
<p class="story">Once upon a time there were three little sisters; and their names were  <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,  <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and  <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;<a href="http://example.com/tillie" class="siterr" id="link4">Tillie</a>;  <a href="http://example.com/tillie" class="siterr" id="link5">Tillie</a>;  and they lived at the bottom of a well.
</p>
<p class="story">...</p>
<ul id="ulone"><li>01</li><li>02</li><li>03</li><li>04</li><li>05</li>
</ul>
<div class='div11'><ul id="ultwo"><li>0001</li><li>0002</li><li>0003</li><li>0004</li><li>0005</li></ul>
</div>
</body>
</html>

1.得到beautifulsoup对象

soup = BeautifulSoup(html,'html.parser')  #选择解析器

2.获取内容

(1)获取标题对象

print(soup.title)

获取标题文本字符串:

print(soup.title.string)  #返回迭代器,出现换行就找不到了
print(soup.title.text)
print(soup.title.get_text())
title = soup.find('title').get_text()
print(title)

通过上下级关系获取对象

print(soup.title.parent)
print(soup.title.child)
print(soup.title.children)

(2)获取第一个p标签

print(soup.p.get_text())
print(soup.find('p').text)
#获取p的子标签们   (空行也看成了一个children)
print(soup.p.children)
for i,echo in enumerate(soup.p.children):print(i,echo)

(3)获取标签的属性

#只能找到第一个a标签
print('1',soup.a)
print('2',soup.a.name)
#应该这样写
print(soup.a.attrs)
print(soup.a.attrs['href'])
print(soup.a.attrs['id'])
print(soup.a.attrs['class'][0]) #获得的是一个列表,可以用下标查询

(4)获取多个

print(soup.find('p')) #获取一个
print(soup.find_all('p'))  #获取soup内的p标签  返回一个列表

(5)多层查询
find_all查询返回的是列表,使用下标寻找想要的内容

print(soup.find_all('ul'))
print(soup.find_all('ul')[0].find_all('li'))

(6)通过指定的属性,获取对象

print(soup.find(id='ulone'))  #单个对象
print(soup.find('ul',id='ulone'))
print(soup.find_all('ul',id='ulone'))   #可以使用下标查询

class是关键字 要这么写class_

print('class1',soup.find_all('p',class_='title'))
print('class2',soup.find_all('p',attrs={'class':'title'})) #更通用
print('class3',soup.find_all('p',attrs={'class':'title','title':'new'})) #多条件

用函数作为参数,获取元素

def judgeTilte1(t):if t=='title':return True
print(soup.find_all(class_=judgeTilte1))

判断长度

import re  #正则表达式
reg = re.compile("sis")
def judgeTilte2(t):#返回长度为6,且包含'sis'的t参数return len(str(t))==6 and bool(re.search(reg,t))
print(soup.find_all(class_=judgeTilte2))

#获取文本内容

# <p class="title" name="dromouse">
#     <b>The Dormouse's story</b>
#     aaaaa
# </p>
print(soup.find('p').text)
print(soup.find('p').string)  #返回迭代器,出现换行就找不到了<b>,
print(soup.find('p').get_text())

获取可以加limit的,限制访问个数

print(soup.find_all('a',limit=2))

recursive = True 寻找子孙 ;recursive = False只找子

print(soup.find_all('body')[0].find_all('ul',recursive = False))

Python爬虫自学之第(②)篇——BeautifulSoup解析网页相关推荐

  1. Python爬虫入门第一课:如何解析网页

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于肥宅与画家 ,作者AntzUhl 我们编写网络爬虫最主要的目 ...

  2. Python爬虫自学笔记(三)动态网页爬取

    现在很多网站用的是动态网页加载技术,这时候用前面的request库和BS4库就不能解决问题了,需要用新的办法. 打开网页,按F12或者右键弹出菜单里选择"检查",右侧会打开开发者工 ...

  3. python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析

    标签:pattern   div   mat   txt   保存   关于   json   result   with open 关于正则表达式的更多用法,可参考链接:https://blog.c ...

  4. Python爬虫自学要多久?

    时下python爬虫成为时下一种流行的编程语言,从零开始学python爬虫知识要多久了?所谓爬虫是指网络爬虫(web spider),如果把互联网比作一张巨大无比的蜘蛛网,那么web spider就是 ...

  5. Python爬虫自学

    Python爬虫自学 前言 这是我自己学习Python爬虫的学习笔记,内容大部分来自上海交通大学出版的<Python语言程序设计实践教程>,欢迎大家一起交流 参考博客: Python爬虫教 ...

  6. Python爬虫之美丽的汤——BeautifulSoup

    本文概要 本篇文章主要介绍利用Python爬虫之美丽的汤--BeautifulSoup,适合练习爬虫基础同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧!   是不是以为今天要教 ...

  7. python语言自学教程-3D图示Python标准自学教程入门篇

    内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...

  8. python自学教程-3D图示Python标准自学教程入门篇

    内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...

  9. python自学课堂_3D图示Python标准自学教程入门篇

    内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...

最新文章

  1. JVM之内存结构图文详解
  2. HDU 4279 占坑先。。。
  3. java实践源码--哈弗曼树
  4. python中getrandbits函数用法_python random - 刘江的python教程
  5. mysql 索引 lt =_MySQL索引相关
  6. sql union和unmion all区别
  7. AKKA文档(java版)—容错
  8. stm32读取驾驶模拟器数据 stm32F407读取joystick数据
  9. Java 将PDF转为OFD
  10. 我的世界光影mod怎么用_我的世界RTX beta版视频体验:仿佛打破了次元壁
  11. 快乐课堂--寓教于乐、老师必备的课堂教学软件
  12. 小马激活工具对比暴风激活工具
  13. 斐波那契堆的C++实现
  14. 阿里云、腾讯云、UCloud、华为云云主机对比测试报告
  15. macbook air上安装ubuntu双系统
  16. 正交设计 python算法_人人都可以掌握的正交试验设计测试用例方法
  17. 【java后端学习路线3】SSM+Linux+Git学习指南,985本海硕自学转码
  18. 技美 百人计划 (图形)1.1渲染流程
  19. 深入讨论DECLARE_HANDLE(HINSTANCE)
  20. 景安虚拟主机SSL证书导入教程

热门文章

  1. [html] 举例说明实现文字贯穿线的方法有哪些?
  2. [html] 如何阻止屏幕旋转时自动调整字体的大小?
  3. [css] 你了解css3的currentColor吗?举例说明它的作用是什么?
  4. 前端学习(2037)vue之电商管理系统电商系统之优化
  5. 前端学习(1703):前端系列javascript之问题解答
  6. mybatis学习(18):列名与属性名不一致的情况(使用ResultMap)
  7. 55exception对象
  8. Linux 源码编译安装过程-以安装XZ解压为例
  9. HTML DOM之属性的各种操作方法
  10. linux 64位 寻址空间_Ubuntu 20.04(64位)如何配置gcc-3.4用于编译linux-0.11