前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫—批量爬取图片

Python爬虫—批量爬取图片

作者头像
SakuraTears
发布2022-01-13 14:46:35
8210
发布2022-01-13 14:46:35
举报
文章被收录于专栏:从零开始的Code生活

写一个简单地爬取图片的代码吧,以便下次用的时候直接调用0.0 这里选择图库 中国作为抓取页面。

导入库

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

如果pip库慢的话可以看pip安装慢解决方法

发送请求

打开控制台随便找一张图片找到他的url

udga7AooXU.png
udga7AooXU.png

发现图片在一个div里然后嵌套li/a/img,然后data-original属性的值就是图片的url。 用xpath把页面里所有的图片url保存下来。

代码语言:javascript
复制
url = 'https://www.tukuchina.cn/index.php?r=photo/channelInfo&chid=&q=%E5%8C%97%E4%BA%AC%20%E6%9C%9D%E9%98%B3%E5%8C%BA'
response = requests.get(url)
html = response.text
html = etree.HTML(html)
photo = html.xpath('//div[@class="items"]/li/a/img/@data-original')

用etree.HTML将字符串转换成_Element对象,方便后面的xpath操作

保存图片

上面的photo保存的是当前页面所有图片的url,所以要循环获取每个url。 然后再用get请求图片的url。

用with open保存图片。

代码语言:javascript
复制
m = 1
for i in photo:
    print(m)

    res = requests.get(i)
    with open('./img/img' + str(m) + '.jpg', 'wb') as f:
        f.write(res.content)
    m += 1

获取所有页面的图片

上面方法只是请求的一个页面的url,这个网站有很多页面,如果我们要爬取所有页面的图片就要知道所有页面的url

ZLgTEXQYFM.png
ZLgTEXQYFM.png

可以发现不同页面只有后面的&type=&Photo_page=不同,所以可以在一个循环里每次改变&type=&Photo_page=的值即可遍历所有页面。

代码语言:javascript
复制
while (num < 5):
    if (num == 1):
        url = 'https://www.tukuchina.cn/index.php?r=photo/channelInfo&chid=&q=%E5%8C%97%E4%BA%AC%20%E6%9C%9D%E9%98%B3%E5%8C%BA'
    else:
        url = 'https://www.tukuchina.cn/index.php?r=photo/channelInfo&chid=&q=%E5%8C%97%E4%BA%AC%20%E6%9C%9D%E9%98%B3%E5%8C%BA' + '&type=&Photo_page=' + (str)num
    num += 1

因为第一页是没有后缀的所以当num == 1的时候不能加后缀

所有代码

可以写一个请求头把请求伪装成浏览器 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'} 记得在代码里加上time.sleep设置爬取频次,不然网站可能受不了那么高频的请求。

代码语言:javascript
复制
import requests
from lxml import etree
import time
 
num = 1
while (num < 5):
    if (num == 1):
        url = 'https://www.tukuchina.cn/index.php?r=photo/channelInfo&chid=&q=%E5%8C%97%E4%BA%AC%20%E6%9C%9D%E9%98%B3%E5%8C%BA'
    else:
        url = 'https://www.tukuchina.cn/index.php?r=photo/channelInfo&chid=&q=%E5%8C%97%E4%BA%AC%20%E6%9C%9D%E9%98%B3%E5%8C%BA' + '&type=&Photo_page=' + str(num)
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}
    response = requests.get(url, headers = headers)
    html = response.text
    html = etree.HTML(html)
    photo = html.xpath('//div[@class="items"]/li/a/img/@data-original')
 
    m = 1
    for i in photo:
        print(m)
        time.sleep(0.5)
        res = requests.get(i)
        with open('./img/img' + str(m) + '.jpg', 'wb') as f:
            f.write(res.content)
        m += 1
    num += 1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年03月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入库
  • 发送请求
  • 保存图片
  • 获取所有页面的图片
  • 所有代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档