分页爬取某网站图片

19 篇文章 0 订阅
10 篇文章 0 订阅
爬取分页彼岸图网图片

爬取图片:

1.获取待爬取网站主页网址

2.如果要分页爬取的话,观察一下每个页面主页网址,可以发现 (第一页num为空,从第二页开始有num数值)http://pic.netbian.com/4kmeinv/index_{num}.html

每次是num位置的改变,对应的num值代表页数

3.首先爬取主页信息并进行页面数据预处理

在这里插入图片描述

4.笔记本Fn+F12(或者右键 ‘检查’ )进入页面开发者模式

在这里插入图片描述

先点击左边图标,变蓝色后点击要定位的图片,可以获取图片对应的元素

在这里插入图片描述

可以发现 img 标签里 src属性存储的是图片下载链接的后半部分,前半部分是彼岸图网原始地址:http://pic.netbian.com/;alt存储的是图片名称。观察此标签的上层目录,可以发现有一个 li 标签的列表,每张图片的链接和名称都放在对应li标签中,每个li标签内部结构相同,这就非常有利于遍历 li 列表进行图片爬取
在这里插入图片描述

补充一些xpath解析的基础知识方便理解:

在这里插入图片描述

然后理解下面代码就简单了

li_list = tree.xpath('//div[@class="slist"]/ul/li')

表示从任意位置开始查找class="slist"的标签,然后寻找此标签下的ul,再寻找ul下的li标签

detail_url = 'http://pic.netbian.com/' + li.xpath('.//a/img/@src')[0]

表示从当前位置获取下级的a标签,再在a标签找下面img标签,获取src属性值

在这里插入图片描述

爬取名称时可能出现乱码, 我们将编码转化为gbk格式

detail_name = detail_name.encode('iso-8859-1').decode('gbk')

下面是爬取每一张图片页面的详细信息:

detail_data = requests.get(url=detail_url, headers=headers).content

设置存储路径并以二进制形式(’wb‘)保存

detail_path = f'p{num}/' + detail_name

with open(detail_path, 'wb') as fp:	
    fp.write(detail_data)
print(detail_name, '爬取完毕')

下面是源代码+详细注释:

# 分页爬取图片
import requests
import os
from lxml import etree

print('# -*- coding: utf-8 -*-\n\
# @Author : Fuzihao ')
print('图片内容在p开头文件夹中')
start = int(input('请输入开始的页数(从2开始吧): '))
end = int(input('请输入结束的页数(最好不要超过170: '))
for num in range(start, end + 1):
    # 网站主页
    url = f"http://pic.netbian.com/4kmeinv/index_{num}.html"
    # 设置headers,进行UA伪装,模拟浏览器,可换为自己浏览器的UA
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}
    # get到的主页数据
    page_text = requests.get(url=url, headers=headers).text
    # 使用etree进行网页数据预处理
    tree = etree.HTML(page_text)
    # 获取li标签列表
    li_list = tree.xpath('.//div[@class="slist"]/ul/li')
    # 如果不存在p{num}文件夹则创建
    if not os.path.exists(f'./p{num}'):
        os.mkdir(f'./p{num}')
    print(f'正在爬取第{num}页')
    # 遍历所有li标签
    for li in li_list:
        # 每张图片具体网址
        detail_url = 'http://pic.netbian.com/' + li.xpath('.//a/img/@src')[0]
        # 图片名称
        detail_name = li.xpath('.//a/img/@alt')[0] + '.jpg'
        # 防止文件名出现乱码
        detail_name = detail_name.encode('iso-8859-1').decode('gbk')
        # 待爬取图片的具体信息
        detail_data = requests.get(url=detail_url, headers=headers).content
        # 文件保存路径及文件名
        detail_path = f'p{num}/' + detail_name
        # 二进制形式存储图片
        with open(detail_path, 'wb') as fp:
            fp.write(detail_data)
        print(detail_name, '爬取完毕')

pycharm中格式化代码快捷键 (规范代码格式):Ctrl+Alt+L

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Python中进行分页爬取,可以使用循环来遍历不同页面的URL,并发送HTTP请求获取页面内容。以下是一个简单的示例来说明分页爬取的过程: ```python import requests # 定义分页数量和起始页码 page_count = 5 start_page = 1 # 循环遍历不同页面 for page in range(start_page, start_page + page_count): url = f'https://www.example.com/page/{page}' # 构造不同页面的URL response = requests.get(url) # 发送HTTP请求获取页面内容 # 处理页面内容,例如解析HTML或提取数据 # ... # 在这里执行你的爬取逻辑 # ... print(f'爬取第 {page} 页完成') print('所有页面爬取完成') ``` 在上面的示例中,我们首先定义了要爬取的总页数`page_count`和起始页码`start_page`。然后使用循环来遍历不同页面,构造不同页面的URL并发送HTTP请求获取页面内容。你可以根据实际情况进行URL的构造。 在循环内部,你可以根据需要对每个页面的内容进行处理,如解析HTML、提取数据等。然后,在合适的位置编写你的爬取逻辑,对页面内容进行进一步处理或提取所需数据。 最后,我们打印出完成爬取的信息,当所有页面都爬取完成后,会打印出"所有页面爬取完成"的提示。 请注意,上述示例只是一个简单的框架,具体的爬取逻辑和页面处理需要根据实际需求进行编写。此外,需要注意爬虫的合法性和遵守相关网站爬取规则,避免给目标网站带来不必要的负担或违反法律法规。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SimpleZihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值