首页 日常,🏆爬虫,🧊Python

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

导入库

import requests
from lxml import etree
import time

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

发送请求

打开控制台随便找一张图片找到他的url
udga7AooXU.png
发现图片在一个div里然后嵌套li/a/img,然后data-original属性的值就是图片的url。
用xpath把页面里所有的图片url保存下来。

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保存图片。

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

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设置爬取频次,不然网站可能受不了那么高频的请求。

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



文章评论

    Brandy 访客ChromeWindows
    2021-09-26 15:07   回复

    能不能搜索关键词批量下载呀 哥哥

      Narakue 站长ChromeWindows
      2021-09-27 13:54   回复

      那不差不多吗