python:bs4爬取奥特曼,是不是所有奥特曼都长一样
利用python+bs4爬取奥特曼粉丝联盟的奥特曼图片,难点把其实也没有,就是爬虫不经常搞,容易忘记一些东西。废话不多说,直接上代码
主要引包
import os
from pathlib import Path
from bs4 import BeautifulSoup
from requests import Session
- os模块在这里的功能就是判断路径是否存在的
- pathlib模块主要是获取路径用的
- BeautifulSoup就是解析库,也是主要的爬取数据库
- requests库调用了Session(类似一个浏览器),主要用于请求获取页面的
代码整合
import os
from pathlib import Path
from bs4 import BeautifulSoup
from requests import Session
class UltramanCrawling:
def __init__(self):
self.s = Session()
self.s.headers.update(
{"User-Agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"})
def request_url(self, url):
"""
返回解码后,然后再解析的html树
:param url:
:return:
"""
response = self.s.get(url=url)
response.encoding = "gbk"
return BeautifulSoup(response.text, 'lxml')
def handle_tree(self):
"""
处理树
:return:
"""
soup = self.request_url("http://www.ultramanclub.com/allultraman/")
# 拿到奥特曼一览版块
ultraheros = soup.find("div", class_="ultraheros-Contents_Lists")
# 拿到lists下的标签树
ultraheros_lists = ultraheros.find("ul", class_="lists")
name_lists, url_lists = [], []
# 循环获取奥特曼名称,并插入列表
for name in ultraheros_lists.find_all("p"):
name_lists.append(name.text.rstrip())
# 循环获取奥特曼头像,并插入列表
for img_url in ultraheros_lists.find_all("img"):
url_lists.append(img_url.attrs["src"].replace(".", "http://www.ultramanclub.com/allultraman", 1))
return name_lists, url_lists
def run_main(self):
"""
爬虫入口,并执行存储操作
:return:
"""
# 利用enumerate函数,获取url_lists中的索引和值
name_lists, url_lists = self.handle_tree()
for i, url in enumerate(url_lists):
# 图片地址取请求接口下载
response = self.s.get(url=url)
# 判断是否请求成功
if response.ok:
# 拿取路径,更换图片保存的后缀名,进行存错
with open(self.is_exists(name_lists[i] + ".png"), 'wb') as save:
save.write(response.content)
else:
print("全部下载完成")
@staticmethod
def is_exists(name: str):
"""
静态方法,执行路径判定是否存在
:param name:
:return:
"""
base_dir = Path(__file__).parent.joinpath("UltramanImg")
if not os.path.exists(base_dir):
os.mkdir(base_dir)
return base_dir.joinpath(name)
if __name__ == '__main__':
# 创建对象,调用运行方法
UltramanCrawling().run_main()
上述代码直接给封装成了一个爬虫类,里面的一些方法也都写了注释,有python基础的几乎都能看得懂,没啥技术难点。
展示结果
从结果可以看到,奥特曼都长一样的定义是错的,请相信这个世界有光,也请相信这个世界是有奥特曼的 !!!!!
以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;非常期待你的点赞和分享哟,谢谢!
未完,待续…
一直都在努力,希望您也是!
微信搜索公众号:就用python
作者:李 锋|编辑排版:梁莉莉