睡觉也在爬虫之二(爬一组图片)


书接上回
https://blog.csdn.net/weixin_43623271/article/details/122492700

爬虫思路

找到组图的页码栏

当前是第一页,也是第一张图的地址
在这里插入图片描述

找到总页数的元素

在这里插入图片描述
用xpath语法匹配

查看每张图url的规律

第一张图url
在这里插入图片描述
第二张图url
在这里插入图片描述
可以推测出图url规律
236000_x.html

循环访问图片url并找出存放jpg的元素

每个图片的地址源代码中都会有其jpg地址
在这里插入图片描述
这里也用xpath匹配上图片的标题,写入文件的时候可以用此名作为文件名

循环写入文件

请求相应的jpg内容,并写入文件

实现过程

定义请求头,url变量

headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
    'cookie':'Hm_lvt_c08bad6ac66a035b30e72722f365229b=1642073389; Hm_lpvt_c08bad6ac66a035b30e72722f365229b=1642073420',
    'referer':'https://www.tupianzj.com/meinv/mm/meizitu/',
}
picburp_num = '236000'
url = 'https://www.xxx.com/meinv/20211208/'+picburp_num+'.html'

源码解析成html

# 将源码解析成html
r = requests.get(url,headers=headers)
html = etree.HTML(r.content.decode('gb2312'))

找到总页数和图片元素

# 用xpath选择器匹配图片元素
pic_tag = html.xpath('//div[@id="bigpic"]//img/@src') #列表

# 总页数
pic_num_tag = html.xpath('//div[@class="pages"]//a/text()')[0]
num = re.findall(r'\d+',pic_num_tag)[0]

创建目录,用于存储图片

#创建文件夹用于保存图片
dir_path = 'e:/meizitu'
if not os.path.exists(dir_path):
    os.mkdir(dir_path)
    print(f"[+] 创建{dir_path.split('/')[1]}文件夹")

循环总页数,并写入文件

# 第一张图片236000.html ,第二张图片236000_2.html,第一张图片没规律所以分类讨论
for i in range(1,int(num)+1):
    if i == 1:
        url = 'https://www.xxx.com/meinv/20211208/236000.html'
    else:
        url = 'https://www.xxx.com/meinv/20211208/236000_'+str(i)+'.html'
    r = requests.get(url,headers=headers)
    html = etree.HTML(r.content.decode('gb2312'))
    # 用xpath选择器匹配指定元素
    pic_tag = html.xpath('//div[@id="bigpic"]//img/@src') #列表
    pic_jpg_src = pic_tag[0]
    pic_name_tag = html.xpath('//div[@class="list_con bgff"]/h1/text()')
    pic_name = pic_name_tag[0]
    pic_html_path = dir_path+'/'+pic_name+'.jpeg'
    pic_content = requests.get(pic_jpg_src,headers=headers)
    with open(pic_html_path,'wb') as f:
        f.write(pic_content.content)
        print(f'[+] {pic_name}下载完毕')

完整代码

import requests
from lxml import etree
import os
import re

headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
    'cookie':'Hm_lvt_c08bad6ac66a035b30e72722f365229b=1642073389; Hm_lpvt_c08bad6ac66a035b30e72722f365229b=1642073420',
    'referer':'https://www.tupianzj.com/meinv/mm/meizitu/',
}
picburp_num = '236000'
url = 'https://www.xxx.com/meinv/20211208/'+picburp_num+'.html'

# 将源码解析成html
r = requests.get(url,headers=headers)
html = etree.HTML(r.content.decode('gb2312'))

# 用xpath选择器匹配指定元素
pic_tag = html.xpath('//div[@id="bigpic"]//img/@src') #列表

# 总页数
pic_num_tag = html.xpath('//div[@class="pages"]//a/text()')[0]
num = re.findall(r'\d+',pic_num_tag)[0]

#创建文件夹用于保存图片
dir_path = 'e:/meizitu'
if not os.path.exists(dir_path):
    os.mkdir(dir_path)
    print(f"[+] 创建{dir_path.split('/')[1]}文件夹")

# 第一张图片236000.html ,第二张图片236000_2.html,第一张图片没规律所以分类讨论
for i in range(1,int(num)+1):
    if i == 1:
        url = 'https://www.tupianzj.com/meinv/20211208/236000.html'
    else:
        url = 'https://www.tupianzj.com/meinv/20211208/236000_'+str(i)+'.html'
    r = requests.get(url,headers=headers)
    html = etree.HTML(r.content.decode('gb2312'))
    # 用xpath选择器匹配指定元素
    pic_tag = html.xpath('//div[@id="bigpic"]//img/@src') #列表
    pic_jpg_src = pic_tag[0]
    pic_name_tag = html.xpath('//div[@class="list_con bgff"]/h1/text()')
    pic_name = pic_name_tag[0]
    pic_html_path = dir_path+'/'+pic_name+'.jpeg'
    pic_content = requests.get(pic_jpg_src,headers=headers)
    with open(pic_html_path,'wb') as f:
        f.write(pic_content.content)
        print(f'[+] {pic_name}下载完毕')

效果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值