爬虫爬取蜂鸟里的高清壁纸

  想要自动下载某个网站的高清壁纸,不能一个个点击下载,所以用爬虫实现自动下载。改代码只针对特定网站,不同网站需要特别分析。

一、分析网站

  https://photo.fengniao.com/

 

  随便点击一张,发现可以上一页,下一页的翻页,所以可以获取改图之后,获得下一张图片地址,无线循环,下载壁纸。本次为了多功能实现,用到了beautifulsoup和re正则表达式两种搜索方式。

  上图中需要的信息,从上到下:改图下载地址,图片名字,下一张图片地址。

二、获取网页

1
2
3
4
5
6
7
8
def getHtmlurl(url):  # 获取网址
    try:
        = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

三、下载图片和获取下一个图片地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def getpic(html):  # 获取图片地址并下载,再返回下一张图片地址
    soup = BeautifulSoup(html, 'html.parser')
    #all_img = soup.find('div', class_='imgBig').find_all('img')
 
    all_img = soup.find('a'class_='downPic')
    img_url = all_img['href']
 
    reg = r'<h3 class="title overOneTxt">(.*?)</h3>'# r'<a\sclass=".*?"\starget=".*?"\shref=".*?">(.*)</a>'  # 正则表达式
    reg_ques = re.compile(reg)  # 编译一下正则表达式,运行的更快
    image_name = reg_ques.findall(html)  # 匹配正则表达式
 
    urlNextHtml = soup.find('a'class_='right btn')
    urlNext = urlHead+urlNextHtml['href']
 
    print('正在下载:' + img_url)
    root = 'D:/pic/'
    path = root + image_name[0+ '.jpg'
    try:  # 创建或判断路径图片是否存在并下载
            if not os.path.exists(root):
                os.mkdir(root)
            if not os.path.exists(path):
                = requests.get(img_url)
                with open(path, 'wb') as f:
                    f.write(r.content)
                    f.close()
                    print("图片下载成功")
            else:
                print("文件已存在")
    except:
        print("爬取失败")
    return urlNext

四、结果 

 

  当然,我们也可以下载别的网页上图片,如下图,这就不放大了。  

                                         

 

 五、源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from bs4 import BeautifulSoup
import requests
import os
import re
 
urlHead = 'https://photo.fengniao.com/'
url = 'https://photo.fengniao.com/pic_43591143.html'
 
def getHtmlurl(url):  # 获取网址
    try:
        = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
 
def getpic(html):  # 获取图片地址并下载,再返回下一张图片地址
    soup = BeautifulSoup(html, 'html.parser')
    #all_img = soup.find('div', class_='imgBig').find_all('img')
 
    all_img = soup.find('a'class_='downPic')
    img_url = all_img['href']
 
    reg = r'<h3 class="title overOneTxt">(.*?)</h3>'# r'<a\sclass=".*?"\starget=".*?"\shref=".*?">(.*)</a>'  # 正则表达式
    reg_ques = re.compile(reg)  # 编译一下正则表达式,运行的更快
    image_name = reg_ques.findall(html)  # 匹配正则表达式
 
    urlNextHtml = soup.find('a'class_='right btn')
    urlNext = urlHead+urlNextHtml['href']
 
    print('正在下载:' + img_url)
    root = 'D:/pic/'
    path = root + image_name[0+ '.jpg'
    try:  # 创建或判断路径图片是否存在并下载
            if not os.path.exists(root):
                os.mkdir(root)
            if not os.path.exists(path):
                = requests.get(img_url)
                with open(path, 'wb') as f:
                    f.write(r.content)
                    f.close()
                    print("图片下载成功")
            else:
                print("文件已存在")
    except:
        print("爬取失败")
    return urlNext
 
def main():
    html=(getHtmlurl(url))
    print(html)
    return getpic(html)
if __name__ == '__main__':
    for in range(1,100):
        url=main()

  下一篇应该是,爬某网站的小视频。

有问题,联系微信:GD5626633

版权声明:本文为shijieyanyuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shijieyanyuan/p/py_Pictures.html