爬虫自动抓取壁纸

爬虫自动抓取壁纸

最近发现电脑桌面屏保需要大量壁纸来轮换,可是电脑里并没有这么多图片,于是决定写个小爬虫抓一点壁纸来用.在网上随便翻了个壁纸网站,就开干了. 爬虫用到了python的requests库和lxml库,需要额外安装.

分析过程

首先打开网站的主页面,可以看到有许多的图片,我比较喜欢风景图,于是切换到风景选项.

爬虫自动抓取壁纸_第1张图片

点击进入某个图片,并查看该页面的源代码

爬虫自动抓取壁纸_第2张图片
在这里插入图片描述

很容易看到,图片的url地址就在class为photo-pic的div标签的里面. 所以只需要分别进入每个图片的页面并提取出这个url就行了. 不过分别进入每个图片的链接在哪呢.于是再次查看初始页面的源码.爬虫自动抓取壁纸_第3张图片

很显然,class为clearfix的ul标签中的每个li标签都有一个a标签, 其中的href属性便是跳转到相应的图片页面的url. 万事具备,只欠敲代码了.

实现过程

完整代码

import requests
from lxml import etree
import time
n = 1  #图片序号
url = 'http://pic.netbian.com/4kfengjing/'
headers = {
    'Referer': 'http://pic.netbian.com/4kfengjing/',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
head_url = 'http://pic.netbian.com'  
url_list = []

def get_one_page(url):
    try:
        begin_page = requests.get(url, headers=headers)  #获得初始页面的数据
        begin_page.raise_for_status()
        html_begin = etree.HTML(begin_page.text)
        result_begin = html_begin.xpath('//ul[@class="clearfix"]/li/a/@href')  #解析出每个图片页面的url
        for html_url in result_begin: 
            all_url = head_url + str(html_url)
            photo_page = requests.get(all_url,headers=headers)
            photo_html = etree.HTML(photo_page.text)
            photo_url = photo_html.xpath('//div[@class="photo-pic"]/a/img/@src')  #解析出每个图片的地址
            real_url = head_url + str(photo_url[0])  # 拼接出完整的图片地址url
            url_list.append(real_url)    #将每个图片url添加到url_list中
            time.sleep(0.5)
    except:
        print("error")

def download_photo(list): #从url_list中读取每个图片url并将其保存到文件中
    global n
    for url in list:
        r = requests.get(url, headers=headers)
        with open('photo/'+str(n)+'.jpg','wb') as f:  
            f.write(r.content)
            print('下载完成')
        n = n + 1
        time.sleep(0.5)

def main():
    print('正在抓取链接中...')
    for i in range(2,30):  #可自行修改爬取多少页
        url_append = "index_{}.html".format(i)
        url = 'http://pic.netbian.com/4kfengjing/' + url_append
        get_one_page(url)
    download_photo(url_list)

if __name__ == '__main__':
    main()

你可能感兴趣的:(项目,爬虫,python)