当前位置:   article > 正文

Python爬虫骚操作:1. 爬取彼岸高清壁纸,并下载到本地_爬取彼岸图网 手机壁纸

爬取彼岸图网 手机壁纸

Python爬彼岸高清壁纸,并下载到本地

    • 1. 目标
    • 2. 项目准备
    • 3. 网站分析
    • 4. 反爬分析
    • 5. 基础代码实现
    • 6. 多页抓取分析
    • 7. 多页抓取处理
    • 8. 批量下载到本地
    • 9. 效果显示
    • 10. 完整代码

1. 目标

爬取彼岸壁纸,批量下载图片,并保存到本地。

2. 项目准备

软件:Pycharm
第三方库:requests,fake_useragent,lxml
网站地址:http://www.netbian.com/meinv/

3. 网站分析

打开网站看一下。
在这里插入图片描述
F12检查,审查元素。
在这里插入图片描述
可以获取到该图片的URL地址,尝试打开看一下。
在这里插入图片描述
可以看到这是一张分辨率很低的图片,并不是我们要图片。
因此我们只有先进入内页进行抓取图片。
在这里插入图片描述
先获取红色框地址链接,进入内页。
在这里插入图片描述
高清图片再也藏不住了。
继续审查元素
在这里插入图片描述
可以找到高清图片地址。以上只是获取一个,若是获取全部只要在首页中拿到全部小图地址链接进入内页解析即可全部获取,不再赘述。至于多页爬取,请继续浏览。

分析完毕,接下来代码操作。

4. 反爬分析

同一个ip地址去多次访问会面临被封掉的风险,这里采用fake_useragent,产生随机的User-Agent请求头进行访问。

5. 基础代码实现

import requests
from fake_useragent import UserAgent
from lxml import etree
class BiAn():
    def __init__(self):
        self.url = 'http://www.netbian.com/meinv/'
        ua = UserAgent()
        for i in range(1, 100):
            self.headers = {
                'User-Agent': ua.random
            }
    def main(self):
       pass
if __name__ == '__main__':
    spider = BiAn()
    spider.main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

发送请求,获取网页。

def get_html(self, url):
	response = requests.get(url, headers=self.headers)
	html = response.content.decode('gbk')
	return html
  • 1
  • 2
  • 3
  • 4

注:html = response.content.decode(‘gbk’)
在这里插入图片描述

获取每个图片url链接

def parse_html(self, html):
    target = etree.HTML(html)
    links = target.xpath('//*[@id="main"]/div[4]/ul/li/a/@href')
    for link in links:
        print('http://www.netbian.com' + link)
  • 1
  • 2
  • 3
  • 4
  • 5

此刻已经拿到了进入内页的url,再次进入内页解析可以获得到真正高清的图片链接,即我们需要的。

target_html = self.get_html(target_link)
target = etree.HTML(target_html)
result_src = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@src')[0]
print(result_src)
  • 1
  • 2
  • 3
  • 4

效果图展示
在这里插入图片描述

6. 多页抓取分析

第一页链接
在这里插入图片描述
第二页链接
在这里插入图片描述
第三页链接
在这里插入图片描述
可以总结出除了第一页比较特殊外,其它的都是
http://www.netbian.com/meinv/index_页码.htm

7. 多页抓取处理

pages = int(input("请输入要爬取的页数:"))  # 想要爬取的总页数
for page in range(1,pages+1):
    if page == 1:
        url = self.url
    else:
        url = self.url + 'index_{}.htm'.format(page)
    html = self.get_html(url)
    self.parse_html(html)
    print("第%s页爬取完成。。。"%page)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8. 批量下载到本地

# 创建保存图片的文件夹
self.folder_name = './temp_data/'
if not os.path.exists(self.folder_name):
    os.mkdir(self.folder_name)
  • 1
  • 2
  • 3
  • 4
result_src_name = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@title')[0]
img = requests.get(result_src, headers=self.headers)
with open('./temp_data/'+result_src_name+'.jpg','wb')as f:
    f.write(img.content)
  • 1
  • 2
  • 3
  • 4

9. 效果显示

在这里插入图片描述

看一下本地文件。
在这里插入图片描述

10. 完整代码

import requests
import os
from fake_useragent import UserAgent
from lxml import etree
class BiAn():
    def __init__(self):
        self.url = 'http://www.netbian.com/meinv/'
        ua = UserAgent()
        for i in range(1, 100):
            self.headers = {
                'User-Agent': ua.random
            }
        # 创建保存图片的文件夹
        self.folder_name = './temp_data/'
        if not os.path.exists(self.folder_name):
            os.mkdir(self.folder_name)
    def get_html(self, url):
        response = requests.get(url, headers=self.headers)
        html = response.content.decode('gbk')
        return html
    def parse_html(self, html):
        target = etree.HTML(html)
        links = target.xpath('//*[@id="main"]/div[4]/ul/li/a/@href')
        for link in links:
            target_link = 'http://www.netbian.com' + link
            target_html = self.get_html(target_link)
            target = etree.HTML(target_html)
            result_src = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@src')[0]
            result_src_name = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@title')[0]
            img = requests.get(result_src, headers=self.headers)
            with open('./temp_data/'+result_src_name+'.jpg','wb')as f:
                f.write(img.content)
    def main(self):
        pages = int(input("请输入要爬取的页数:"))  # 想要爬取的总页数
        for page in range(1,pages+1):
            if page == 1:
                url = self.url
            else:
                url = self.url + 'index_{}.htm'.format(page)
            html = self.get_html(url)
            self.parse_html(html)
            print("第%s页爬取完成。。。"%page)
if __name__ == '__main__':
    spider = BiAn()
    spider.main()
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/486899
推荐阅读
相关标签
  

闽ICP备14008679号