Python下载神器爬虫某图网站的高清图片,详细新版

文摘   科技   2023-12-28 19:09   广东  


ISEE小语


想,都是问题;看,都是建议;做,都是方法。
——看懂了吗?




    本次通过requestium和BeautifulSoup这两个三方包,组合高效的爬取图网的图片。

    requestium是用于简化使用requests和Selenium库进行web自动化测试和爬虫任务的开发。它提供了一个易于使用的API,同时结合了requests库的简洁性和Selenium库的功能强大性。

    BeautifulSoup是用于从HTML或XML文档中提取数据的工具。它提供了一种简单且灵活的方式来解析和遍历网页内容,使得数据提取和处理变得更加容易。



环境:

Pycharm

Python 3.9.16



安装:

pip install requestium==0.3.0

pip install beautifulsoup4==4.12.2

注:爬虫需要的包,没有的话可以去自行下载。直接用pip安装即可。


导入:

import refrom requestium import Sessionfrom bs4 import BeautifulSoup

(左右滑动查看完整代码)






1 网站地址


首先,先确定网站地址

# 网图地址base_url = 'http://www.netbian.com'

(左右滑动查看完整代码)


再根据自己的需要的分类资源去进入分类首页面,本次以【动漫】分类为例,就爬取这个了。

# 根据自己的需要的分类资源,本次以【动漫】分类为例sub_class = 'dongman'# 定义分类的首页,爬取相应资源url = f'{base_url}/{sub_class}/'

(左右滑动查看完整代码)



2 头信息


头信息,即headers信息 

headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'}

(左右滑动查看完整代码)


headers可以在浏览器中获取,打开浏览器,按下F12键,输入网站链接,在Network中可以看到。


3 创建会话


使用requestium库,首先需要创建会话对象

# 创建一个会话对象ses = Session()ses.headers.update(headers)

(左右滑动查看完整代码)




4 获取页面内容


获取【动漫】分类首页的页面内容

# 获取页面内容resp = ses.get(url, headers=headers)resp.raise_for_status()resp.encoding = resp.apparent_encodinghtml_content = resp.textprint(html_content)

(左右滑动查看完整代码)

结果:



5 获取图片链接


爬取第一页所有图片的链接,并将含有https的链接直接剔除掉,组成完整的有效链接

# 获取图片链接url_list = []soup = BeautifulSoup(html_content, 'html.parser')sp = soup.find_all('div', class_="list")# 用正则表达式提取链接url_all = re.findall(r'a href="(.*?)"', str(sp))for i in url_all:    # 优化一下所获得的链接,将含有https的链接直接剔除掉    if 'https' in i:        continue    # 在获取的链接中添加前缀(就是主网站的链接),组成完整的有效链接    url_list.append(base_url + i)print(url_list)

(左右滑动查看完整代码)




6 下载并保存


打开第一页所有图片的链接,并以二进制形式返回结果,给图片赋予名字,保存到相应文件夹下,可以看一下效果

for index, _url in enumerate(url_list):    sleep(3)    # 获取页面内容    resp = ses.get(_url, headers=headers)    resp.raise_for_status()    resp.encoding = resp.apparent_encoding    html_content = resp.text    soup = BeautifulSoup(html_content, 'html.parser')    pic_soup = soup.find('div', class_="pic")    pic_url = re.findall(r'lay-src="(.*?)"', str(pic_soup))[0]    # 打开图片链接,并以二进制形式返回结果    pic = ses.get(pic_url).content    # 给图片赋予名字及保存到相应文件夹下    image_name = '动漫模块:' + '第{}页'.format(1) + str(index + 1) + '图.jpg'    image_path = './pictures' + '/' + image_name  # 定义图片保存的地址    with open(image_path, 'wb') as f:  # 保存图片        f.write(pic)        print(image_name, '下载完毕!!!')

(左右滑动查看完整代码)



pictures文件夹内:


爬取代码实现,注重两点,

一是:

加一个等待3s的时间,防止频繁请求网站,被禁止访问

time.sleep(3)



二是:

给图片赋予名字及保存到相应文件夹下,提前需要在代码当前目录下新建文件夹pictures,使用的时候这个可自定义

 # 给图片赋予名字及保存到相应文件夹下image_name = '动漫模块:' + '第{}页'.format(1) + str(index + 1) + '图.jpg'image_path = './pictures' + '/' + image_name  # 定义图片保存的地址with open(image_path, 'wb') as f:  # 保存图片    f.write(pic)    print(image_name, '下载完毕!!!')

(左右滑动查看完整代码)



7 总结


以上实例针对图网的第一页,第二页及之后的链接有一点点变化。在源码中进行了添加,有兴趣可以看源码。


源码将以上共用的方法做了封装,更加清晰,更加方便使用!

有需求的朋友可自取哟

后台回复“tuwang_spider”即可获取~!


寄语:世间三美,明月,清风,眼前……



看到这儿的朋友帮点个“”和“在看”,谢谢支持~!

     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章