爬取彼岸图网实例

本案例适用于爬取彼岸图网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)

  

原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/14153674.html