开往未来的列车|Python爬虫快速入门,静态网页爬取( 二 )
需要注意的是 , 创建BeautifulSoup对象时需要传入两个参数 , 第一个参数是要解析的HTML文本 , 即网站源代码的字符串形式re.text 。 第二个参数是解析HTML的解析器 , html.parser是Python中内置的解析器 , 较为简单方便 。
接下来我们分别打印soup和re.text , 观察其内容有无区别:
import requestsfrom bs4 import BeautifulSoupheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}re = requests.get('', headers=headers)soup = BeautifulSoup(re.text, 'html.parser')print(soup)print(re.text)仔细观察后会发现两次打印的内容完全一样!既然都一样 , 我们何苦费这么大力将网页源代码解析成BeautifulSoup对象呢?为什么不直接打印re.text呢?
其实 , 它们只是看上去一样 , 实际上却属于不同种类 。 现在尝试用type()函数将re.text和BeautifulSoup对象的类型打印出来对比一下:
import requestsfrom bs4 import BeautifulSoupheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}re = requests.get('', headers=headers)soup = BeautifulSoup(re.text, 'html.parser')print(type(re.text))soup = BeautifulSoup(re.text, 'html.parser')print(type(soup))通过输出结果可以看出 , re.text的类型是字符串 , 而soup的类型是BeautifulSoup对象 , 它俩是完全不同的东西 。 相比字符串 , BeautifulSoup对象里有很多强大的方法和属性 。 通过这些方法和属性 , 我们就能方便快捷地提取出我们所需要的数据 。
二、数据提取BeautifulSoup对象里的方法和属性有很多 , 我们只学习其中最常用的一些 , 这些足以应付大多数场景 。 等你真正的入门后 , 可以自行学习那些更高阶的知识去解决更复杂的问题 。
2.1 find()与find_all()BeautifulSoup对象里的find()和find_all()是我们提取数据最常用的两个方法 。 借助它们 , 我们可以过滤掉HTML页面里的无用数据 , 轻松地找到我们需要的数据 。
我们先来看一下find()和find_all()的作用和区别:
方法作用find()返回符合条件的首个数据find_all()返回符合条件的所有数据
我们通过一个例子进一步熟悉这两个方法 , 假设我们获取到的网页源代码如下:
登录/注册豆瓣读书 Top 250豆瓣书店红楼梦百年孤独白夜行接下来分别使用find()与find_all() , 观察输出结果的差异:
print(soup.find('a'))print(soup.find_all('a'))其中 , 使用find()方法输出的结果为:
登录/注册而使用find_all()方法输出的结果为:
[登录/注册,豆瓣书店,红楼梦,百年孤独,白夜行]可以看到 , find()方法返回了第一个a标签 , 而find_all()方法则返回了所有的a标签 。 它俩的用法基本一样 , 都是传入HTML标签名称 , 返回符合该HTML标签的数据 。 区别是find()方法只返回第一个符合条件的标签 , 而find_all()方法返回所有符合条件的标签列表 。
除了传入标签名称外 , 这两个方法还支持传入属性进行筛选 , 返回符合条件的数据 。 例如:
soup.find('div', id='a') # 查找id='a'的div标签soup.find_all('var', class_='b') # 查找所有class='b'的var标签soup.find('button', id='c', class_='d') # 查找id='c'且class='d'的button标签【开往未来的列车|Python爬虫快速入门,静态网页爬取】注:因为class是Python中定义类的关键字 , 因此用class_表示HTML中的class 。
- 金屋房市|未来房价会降多少?可能会跌到刚需兜里有多少钱的地步!你信吗?
- 韦少|未来到底是谁的?韦少哈登太难了,8年过去了詹姆斯怎么还这么强
- 新民晚报|注意了!未来两个双休日3号线这个区段将暂停运营
- 中国新闻网|服贸会商机:“网课”会成为教育行业的未来吗?
- 探索未来|40+女人穿玄色显老?是你不会搭配!看50岁富冈佳子这么穿多美
- 第一财经|免税概念利好消息频出,机构看好板块未来强劲增长丨牛熊眼
- 落叶知秋|中芯国际将被美国拉黑,鸿蒙系统已有进展,未来科技方向在何方?
- 开往未来的列车|3亿人曾用过,最让人感到不舍的腾讯产品,如今终被停服
- 大众报业·海报新闻|该校此前已有3位校友获此殊荣,山东大学教授彭实戈获未来科学大奖
- 瑞银集团|瑞银钱于军:未来中国资本市场进一步开放 很多外资会摩拳擦掌
