网站首页 > 博客文章 正文
今天来继续介绍一个爬虫的解析库,和前面说过的xpath,和正则表达式的是同样的原理,就是把所需要的信息从网页中解析出来。
我们先拿一小段代码来做一下学习,这是一段html代码,接下来需要从中找出我们所需要的文本和链接等相关信息。
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>测试bs4</title>
</head>
<body>
<div>
<p>百里守约</p>
</div>
<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com/" title="赵匡胤" target="_self">
<span>this is span</span>
宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
<img src="http://www.baidu.com/meinv.jpg" alt="" />
</div>
<div class="tang">
<ul>
<li><a href="百度一下,你就知道" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
<li><a href="网易" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
<li><a href="126网易免费邮--你的专业电子邮" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
<li><a href="home.sina.com" class="du">杜甫</a></li>
<li><a href="Awesome Coming Soon Widget Responsive Widget" class="du">杜牧</a></li>
<li><b>杜小月</b></li>
<li><i>度蜜月</i></li>
<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
</ul>
</div>
</body>
</html>
存储到一个文件里,然后通过打开本地文件的操作,就可以开始执行了。
前提是你得先在终端环境中安装这个库。
pip intall bs4
from bs4 import BeautifulSoup
#本地的html
fp = open(r"D:\BaiduNetdiskDownload\爬虫课件\爬虫课件\第三章:数据解析\test.html","r",encoding="utf-8")
soup = BeautifulSoup(fp,"lxml")
# print(soup) #返回这个网页的源代码
# print(soup.a) #返回第一个a标签的内容
# print(soup.div) #返回第一个div 的内容
# print(soup.find("div")) #返回第一个div 的内容
# print(soup.find("div",class_="song")) #返回class = "song" 的div的内容
# print(soup.find_all("a")) #返回所有a标签的内容
# print(soup.find("div",class_="song").a.get("href")) #返回链接http://www.song.com/
# print(soup.find("div",class_="song").img.get("src")) 返回链接:http://www.baidu.com/meinv.jpg
print(soup.find("div",class_="song").a.text) # 返回文本
# print(soup.select('.tang')) 返回class = "tang" 的div的内容
print(soup.select(".tang > ul > li > a")[0].text) # 返回tang下的第一个标签的内容
print(soup.select(".tang > ul > li > a")[0]['href']) # 返回tang下的第一个标签的链接
学习完这个,我们就可以实战了, 第一个案例,获取优美图库(https://www.umeitu.com/bizhitupian/huyanbizhi)的壁纸,并下载高清大图,大图在点击图片后的详情页,所以我们需要两次请求。
import requests
from bs4 import BeautifulSoup
url ='https://www.umeitu.com/bizhitupian/huyanbizhi/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3884.400 QQBrowser/10.8.4560.400'}
page_list = requests.get(url,headers = headers)
page_list.encoding = "utf-8"
html = page_list.text
# 列表页链接
soup = BeautifulSoup(html,"lxml")
urls = soup.find_all(class_="TypeBigPics")
for page_url in urls:
page_url = 'https://www.umeitu.com/' + page_url.get('href')
# print(url)
#获取子页面链接
page_content = requests.get(page_url,headers = headers)
html1 = page_content.text
soup1 = BeautifulSoup(html1,"lxml")
src = soup1.find("p",align="center")
img = src.img.get('src')
# 下载图片
img_resp = requests.get(img)
# print(img_resp.content)
img_name =img.split("/")[-1]
with open(img_name,"wb") as f:
f.write(img_resp.content)
这里需要注意的是,第一次请求列表页,用的soup.find_all,然后再循环,第二次直接soup1.find()这样请求的就是单页面。
然后图片就下载到本地了。
除了下载图片,常见的应用还有下载文本。
这次用soup.select方法下载一本小说。网址是三国
http://www.shicimingju.com/book/sanguoyanyi.html。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
if __name__ == "__main__":
headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3884.400 QQBrowser/10.8.4560.400'}
url = "http://www.shicimingju.com/book/sanguoyanyi.html"
page_text = requests.get(url,headers = headers).text.encode("ISO-8859-1")
soup = BeautifulSoup(page_text,"lxml")
li_list = soup.select(".book-mulu > ul > li")
fp = open("sanguo.txt","w",encoding="utf-8")
for li in li_list:
title= li.a.string
detail_url = "https://www.shicimingju.com/"+li.a["href"]
detail_page_text = requests.get(detail_url,headers= headers).text.encode("ISO-8859-1")
detail_soup = BeautifulSoup(detail_page_text,"lxml")
div_tag = detail_soup.find("div",class_ = "card bookmark-list")
content = div_tag.text
# print(content)
fp.write(title+":"+content+"\n")
print(title,"爬取成功")
?
小说就下载好了。感觉这个网站是个鸡肋网站,第一段看着也不是三国呀,就当练习了,毕竟这个网站也没有做反爬。
猜你喜欢
- 2024-09-27 蚂蚁SEO的网络蜘蛛如何应用(seo蜘蛛是什么意思)
- 2024-09-27 10《Python 原生爬虫教程》BeatifulSoup 的使用
- 2024-09-27 Python代码片段——第三方库自动安装
- 2024-09-27 「Github一周热点32期」本周最火的5个开源项目
- 2024-09-27 python爬虫CSS 选择器-BeautifulSoup4
- 2024-09-27 一篇文章搞定Python爬虫BeautifulSoup解析库
- 2024-09-27 Python学习——网络爬虫-下载小说
- 2024-09-27 python爬虫07 | 有了BeautifulSoup,妈妈不担心我的正则表达式
- 2024-09-27 使用 Python 的 Requests 和 BeautifulSoup 库爬取网站视频
- 2024-09-27 Python爬虫利器(1)Beautiful Soup
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)