zoukankan      html  css  js  c++  java
  • 爬取彼岸图网实例

    本案例适用于爬取彼岸图网4k壁纸10页(如下图

     当然有个问题,如果爬取此页的图片会发现爬下来的图片是不清晰的,所以我们得爬取详情页得图片(如下图

    开始分析:

      1、第一页地址:http://pic.netbian.com/4kyouxi/

        第二页地址:http://pic.netbian.com/4kyouxi/index_2.html

        第三页地址:http://pic.netbian.com/4kyouxi/index_3.html

        一对比会发现第一页与其他页地址不同,得分支处理

      2、进入详情页链接,找网页源码

     

    分析完成就可以进行编写代码了

    分支处理页面地址不同

    1 if __name__ == '__main__':
    2     for i in range(2,20):
    3         if i == 0:
    4             index_base_url = 'http://pic.netbian.com/4kyouxi/index.html'
    5         else:
    6             index_base_url = 'http://pic.netbian.com/4kdongman/index_%s.html'
    7         main(index_base_url %i)

    请求网页地址(定义一个函数用于发送请求地址)

    def get_html(url):
        res = requests.get(url)
        res.encoding = res.apparent_encoding
        return res

    解析请求得页面(定义一个用于解析页面得函数)

    def html_parses(text):
        tree = etree.HTML(text)
        return tree

    请求详情页面(定义一个用于请求详情页得函数)

    def get_img_url(url):
        #调用请求函数
        response = get_html(url)
        #调用解析函数
        tree = html_parses(response.text)
        #xpath获取图片路径
        img_url = tree.xpath('//*[@id="img"]/img/@src')[0]
        #xpath获取图片得名字
        img_name  =tree.xpath('//*[@id="img"]/img/@title')[0]
        #调用保存函数
        save(img_name,'http://pic.netbian.com'+img_url)

    爬取保存至本地(定义一个用于保存得函数)

    def save(name,img_url):
        resonse = get_html(img_url)
        with open('./彼岸图网/%s.jpg'%name,'wb') as f:
            f.write(resonse.content)

    主函数

    def main(url):
        #请求地址
        response = get_html(url)
        #解析页面
        tree = html_parses(response.text)
        #xpath获取图片地址
        detail_urls = tree.xpath('//*[@id="main"]/div[3]/ul/li/a/@href')
        for i in detail_urls:
            #构建完整地址
            get_img_url('http://pic.netbian.com' +i)

    下面是完整得代码

     1 import requests
     2 from lxml.html import etree
     3 def get_html(url):
     4     res = requests.get(url)
     5     res.encoding = res.apparent_encoding
     6     return res
     7 
     8 def html_parses(text):
     9     tree = etree.HTML(text)
    10     return tree
    11 
    12 def main(url):
    13     #请求地址
    14     response = get_html(url)
    15     #解析页面
    16     tree = html_parses(response.text)
    17     #xpath获取图片地址
    18     detail_urls = tree.xpath('//*[@id="main"]/div[3]/ul/li/a/@href')
    19     for i in detail_urls:
    20         #构建完整地址
    21         get_img_url('http://pic.netbian.com' +i)
    22 def get_img_url(url):
    23     #调用请求函数
    24     response = get_html(url)
    25     #调用解析函数
    26     tree = html_parses(response.text)
    27     #xpath获取图片路径
    28     img_url = tree.xpath('//*[@id="img"]/img/@src')[0]
    29     #xpath获取图片得名字
    30     img_name  =tree.xpath('//*[@id="img"]/img/@title')[0]
    31     #调用保存函数
    32     save(img_name,'http://pic.netbian.com'+img_url)
    33 
    34 def save(name,img_url):
    35     resonse = get_html(img_url)
    36     with open('./彼岸图网/'+name+'.jpg','wb') as f:
    37         f.write(resonse.content)
    38 if __name__ == '__main__':
    39     for i in range(2,20):
    40         if i == 0:
    41             index_base_url = 'http://pic.netbian.com/4kyouxi/index.html'
    42         else:
    43             index_base_url = 'http://pic.netbian.com/4kdongman/index_%s.html'
    44         main(index_base_url %i)

      

  • 相关阅读:
    L9,a cold welcome
    别说你不知道java中的包装类,wrapper type,以及容易在自动拆箱中出现的问题
    java导出和读取excel数据
    简单实用句型更新
    PAT1027
    生成英语单词
    c# 操作Word总结【转】
    压缩分卷
    VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
    HOW TO:使用 Visual C# .NET 打印 RichTextBox 控件的内容
  • 原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/14153674.html
Copyright © 2011-2022 走看看