首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >手把手教你使用Python网络爬虫获取搜狗壁纸

手把手教你使用Python网络爬虫获取搜狗壁纸

作者头像
天道Vax的时间宝藏
发布2021-08-11 14:49:11
发布2021-08-11 14:49:11
4990
举报

1.前言

搜狗壁纸是一款高清电脑壁纸下载,集成万款美女、宠物、风景、电影、节日、日历、简约壁纸,一键更换壁纸,多分辨率自适应,支持分组播放。

搜狗壁纸,素材丰富,种类齐全,集美女、风景、萌宠等13个分类。让你的桌面充满爱。

2. 项目目标

教会大家如何去获取搜狗壁纸,下载你喜欢的分类。

3. 项目准备

软件:PyCharm

需要的库:requests、fake_useragent、json

网站如下:

代码语言:javascript
复制
https://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15

4. 项目分析

1)如何找到 json真正访问地址?

1、以壁纸这个分类来看,双击打开网站,右键F12>>找到下面的Network>>XHR>>(点击XHR下的文件)。刷新页面。找到Headers,里面的Request URL。

Request URL如下:

代码语言:javascript
复制
http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864

2、试着去掉一些不必要的部分,技巧就是,删掉可能的部分之后,访问不受影响。经筛选。最后得到的url如下:

代码语言:javascript
复制
http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15  

字面意思,知道category后面可能为分类。start为开始下标,len为长度,也即图片的数量。

2、如何获取里面的图片的地址?

1、点击其中一个文件打开Preview,点开all_items 发现下面是0 1 2 3...一个一个的貌似是图片元素。试着打开一个url。pic_url就是图片的地址。如图:

5. 反爬措施

1、获取正常的http请求头,并在requests请求时设置这些常规的http请求头。

2、使用 fake_useragent ,产生随机的UserAgent进行访问。

6. 项目实现

1、定义一个class类继承object,定义init方法继承self,主函数main继承self。导入需要的库和网址,代码如下所示。

代码语言:javascript
复制
import requests, json

from fake_useragent import UserAgent

class  ShouGO(object):
    def __init__(self):
         pass

    def main(self):
        pass

if __name__ == '__main__':
    Siper = ShouGO()
    Siper.main()

2、随机生成UserAgent,防止反爬。

代码语言:javascript
复制
  ua = UserAgent(verify_ssl=False)
    for i in range(1, 50):
        self.headers = {
            'User-Agent': ua.random,
        }

3、定义Shou方法传入三个参数category, length, path分别对应json地址参数值。实例化变量。

代码语言:javascript
复制
def Shou(self, category, length, path):
      n = length
      cate = category

4、json解析。

代码语言:javascript
复制
imgs = requests.get(
        'http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=' + cate + '&tag=%E5%85%A8%E9%83%A8&start=0&len=' + str(
            n))
    jd = json.loads(imgs.text)
    jd = jd['all_items']
    imgs_url = []

5、for循环遍历数组找到图片地址。

代码语言:javascript
复制
 for j in jd:
        imgs_url.append(j['pic_url'])

6、for循环边框图片地址,定义一个变量m作为图片名称,拼接图片地址。

代码语言:javascript
复制
  m = 0
    for img_url in imgs_url:
        # print(img_url)
        print('***** ' + cate + str(m) + '.jpg *****' + '   Downloading...')

7、 图片地址发生请求,获取响应。

代码语言:javascript
复制
img = requests.get(url=img_url, headers=self.headers).content

8、保存图片

代码语言:javascript
复制
 with open(path + cate + str(m) + '.jpg', 'wb') as f:
          f.write(img)
      # urllib.request.urlretrieve(img_url, path + str(m) + '.jpg')
      m = m + 1
  print('Download complete!')

9、mian里调用Shou方法传入参数。实现功能。

代码语言:javascript
复制
 def main(self):
        self.Shou('汽车', 2000, './壁纸2/')

7. 效果展示

1、点击绿色小三角运行。以Shou('汽车', 2000, './壁纸2/'):(“分类”,长度。"保存的地址")为例。点击运行,结果显示在控制台,如下图所示。

2、保存的图片,如下图所示。

8. 小结

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文章就python爬取搜狗壁纸,以及如何防止反爬,做出了相对于的解决方案。

3、介绍了如何去拼接字符串,以及列表如何进行类型的转换。

5、欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

6、大家可以自行修改自己想要的分列,爬取自己喜欢的图片。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2. 项目目标
  • 3. 项目准备
  • 4. 项目分析
    • 1)如何找到 json真正访问地址?
    • 2、如何获取里面的图片的地址?
  • 5. 反爬措施
  • 6. 项目实现
  • 7. 效果展示
  • 8. 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档