前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬取全站易烊千玺的图片,再也不用一张一张的下载了

爬取全站易烊千玺的图片,再也不用一张一张的下载了

作者头像
Python与Excel之交
发布2021-08-05 11:06:13
9770
发布2021-08-05 11:06:13
举报
文章被收录于专栏:Python与Excel之交

一、前言

上期我们讲解了爬虫是什么、爬虫的基本步骤、以及如何简单的爬取图片的案例:python爬虫入门|教你简单爬取爱豆的图片

今天我们来讲解在上期文章的基础之上,进行全站图片的爬取。

二、确定目标网站,分析网页

首页链接:http://www.win4000.com/mt/yiyangqianxi_1.html

里面是一组一组的组图,一共二十四组。每一组图都有一个特定的url。

点进去组图就是需要保存的目标了.

在首页往下拉,发现易烊千玺的图片组图一共有五页。

点击下一页查看url变化

http://www.win4000.com/mt/yiyangqianxi_1.html

http://www.win4000.com/mt/yiyangqianxi_2.html

http://www.win4000.com/mt/yiyangqianxi_3.html

发现后面的数字发生了变化,和上期文章一样依然是有规律的递增,可知是静态网页。

三、爬取思路

1.访问首页链接:http://www.win4000.com/mt/yiyangqianxi_1.html

2.获取首页中的组图url,然后遍历访问组图url,保存组图中的缩览图图片。本文不直接保存图片,而是以文本格式保存图片的url,再进行保存图片,以此跳过反爬。

3.进行翻页,获取下一页的内容。

四、代码实例

1.导入依赖库

lxml库是html解析库,需要安装,安装方法可以看下上期文章。也可以要re库,看个人爱好。

time是时间库,用来减速用的。

代码语言:javascript
复制
import requests
from lxml import etree
import time

2.建立反爬措施

代码语言:javascript
复制
headers = {
'User-Agent': 你的User-Agent
}

User-Agent字段可以在开发者工具中找到。

3.建立请求函数,获取首页数据。

代码语言:javascript
复制
#定义resposn_data函数,传入页数和反爬措施参数
def resposn_data(page,headers):
    #format传入页数进行翻页操作
    url = 'http://www.win4000.com/mt/yiyangqianxi_{}.html'.format(str(page))
    #爬完一页等2秒
    time.sleep(2)
    resposn = requests.get(url,headers=headers).text
    #返回参数
    return resposn

4.解析网页,获取图片url。

代码语言:javascript
复制
#定义html_data函数,传入网页源代码数据和反爬措施参数
def html_data(resposn,headers):
    #建立列表,保存url
    datas_url = []
    #传入网页源码进行解析
    etrees = etree.HTML(resposn)
    #xpath提取组图url
    data_url = etrees.xpath('//div[@class="Left_bar"]//ul[@class="clearfix"]/li/a/@href')
    time.sleep(3)
    for str_url in data_url:
        data_resposn_url = requests.get(str_url, headers=headers).text
        url_etrees = etree.HTML(data_resposn_url)
        #xpath提取组图内的缩览图url
        sky_url = url_etrees.xpath('//ul[@class="scroll-img scroll-img02 clearfix"]/li/a/img/@data-original')
        for i in sky_url:
            url = i.replace('_130_170','')
            datas_url.append(url)
    return datas_url

xpath是网页的标签(div,li,img等),定位需要获取的内容,需要有html基础知识。本文不详细讲解,本文只介绍个简单获取xpath的方法:

在网页中点击鼠标右键检查→点击开发者工具左边的小箭头→点击组图找到组图url→在url上右键→copy(复制)→copy xpath→ctrl+f把复制的xpath粘贴在上面→删除最后面的[1]、[2]...内容。具体操作可以看下gif:

删除最后面的[1]、[2]...内容后,url只剩下24个。

5.保存图片url

代码语言:javascript
复制
def url_txt(datas_url):
    for i in datas_url:
        #encoding='utf-8'编码
        f = open('图片url.txt','a',encoding='utf-8')
        #\n换行
        f.write(str(i)+'\n')

6.建立脚本启动器,调动函数,传入相应参数

代码语言:javascript
复制
if __name__ == '__main__':
    for page in range(1,6):
        resposn = resposn_data(page,headers)
        datas_url = html_data(resposn, headers)
        url_txt(datas_url)

7.另外新建py文件,进行图片保存

代码语言:javascript
复制

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
with open('图片url.txt') as t:
    for datas_urls in t:
        #删除文件的空行
        tp_url=datas_urls.rstrip()
        #图片的名字
        name = tp_url.split('/')[-1]
        data_sky_url = requests.get(tp_url, headers=headers)
        with open(r'易烊千玺\{}'.format(name),'wb') as f:
            f.write(data_sky_url.content)

8.点击鼠标右键运行后,查看成果,一共有九百七十七张。

五、结语

1.本文在原有的基础上进行了嵌套以及翻页爬取全网站易烊千玺的图片。

2.本文简单的介绍了xpath语法以及怎么简单的获取xpath定位需要的标签,但是xpath语法较为复杂,以后再详细讲解。re库也可以进行解析,用法基本使用.*?即可匹配。

注:本文以及图片仅用于学习以及知识交流!如果侵权,请告知删除!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与Excel之交 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、确定目标网站,分析网页
  • 三、爬取思路
  • 四、代码实例
  • 五、结语
    • 注:本文以及图片仅用于学习以及知识交流!如果侵权,请告知删除!
    相关产品与服务
    云开发 CLI 工具
    云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档