您的位置:  首页 > 技术 > python语言 > 正文

【Python】爬虫实战,零基础初试爬虫下载图片

2021-07-25 14:52 CSDN 攻城狮白玉 次阅读 条评论
一、requests库介绍

Requests库是python一个很好用的http请求库。封装得很好~在我们爬虫的时候常常也会用到。

Requests的官方介绍说到,让HTTP服务人类。有一说一,这是个非常容易使用的库。本次咱们的爬虫也会用到这个库。

关于requests库的介绍,可以看一下官方文档

Requests: 让 HTTP 服务人类 - Requests 2.18.1 文档

使用前记得安装requests库

    pip install requests

二、网站分析

进入目标网站


随便点开一张图,查看它的url,http://www.netbian.com/desk/23744.htm


先留意一下这个网址,后面会用到


回到浏览器,打开F12,通过目标元素检查工具,点击刚刚我们点过的图片。通过它的元素我们可以知道a标签里的属性值href的链接就是上面我们访问图片的链接地址


我们在大图的页面,同样用f12点击一下,找到图片的链接地址


访问图片链接发现是咱们要的大图。至此,对于网站的分析完毕。


三、任务分析


综上所述,咱们目标网站是一个壁纸图片网站,编程做到的步骤如下:

    访问首页
    定位到每个图片的详情链接
    访问详情链接
    定位到图片对应的大图链接。下载,保存图片

看起来是不是很容易,开干
四、编程实现
4.1 访问首页

    import requests
    url = 'http://www.netbian.com/meinv/'
    resp = requests.get(url)
    resp.encoding = 'gbk'
    #
    with open('index.html', 'wb') as f:
        f.write(resp.content)

通过requests库发起get请求,请求壁纸网站的首页。并把结果保存在index.html文件里面

打开保存的文件一看,我们把首页给下载下来了。


4.2 定位元素


这里我们通过xpath方式。这里用到的是lxml库。不懂lxml库的话,参考下文

【Python】爬虫解析利器Xpath,由浅入深快速掌握(附源码例子)

    PS:谷歌渲染的页面的xpath和requests请求回来的xpath会有不一样。有时需要保存下来进行xpath分析

对于元素进行定位。把a标签的href值全部拿出来,而且也把对应的名称取出来

  

tree = etree.HTML(resp.content)

   
    node_list = tree.xpath('/html/body/div[2]/div[2]/div[3]/ul/li')
     
    sub_url_list = []
    for node in node_list:
        if len(node.xpath('./a/@href')) > 0:
            sub_url = node.xpath('./a/@href')[0]
        if len(node.xpath('./a/@href')) > 0:
            title = node.xpath('./a/b/text()')[0]
            sub_url_list.append((sub_url, title))

4.3 访问详情页

    base_url = 'http://www.netbian.com/'
    for sub_url, title in sub_url_list:
        s_page = base_url + sub_url
        s_resp = requests.get(s_page)
        with open('s.html', 'wb') as f:
            f.write(s_resp.content)

4.4 定位图片链接并下载

    img = s_tree.xpath('/html/body/div[2]/div[2]/div[3]/div/p/a/img/@src')[0]
    suffix = img.split('.')[-1]
    img_content = requests.get(img).content
    with open(f'./image/{title}.{suffix}', 'wb') as f:
        f.write(img_content)
        f.close()

下载完效果图


4.5 完整源码


    import requests
    from lxml import etree
    import time
     
    '''
    目标网站是一个图片网站
    1.访问首页
    2.定位到每个图片的下载链接
    3.定位到每个图片对应的大图链接
    4.下载,保存图片
    '''
     
    if __name__ == '__main__':
        t1 = time.time()
        url = 'http://www.netbian.com/meinv/'
        resp = requests.get(url)
        resp.encoding = 'gbk'
        with open('index.html', 'wb') as f:
            f.write(resp.content)
        tree = etree.HTML(resp.content)
     
        node_list = tree.xpath('/html/body/div[2]/div[2]/div[3]/ul/li')
     
        sub_url_list = []
        for node in node_list:
            if len(node.xpath('./a/@href')) > 0:
                sub_url = node.xpath('./a/@href')[0]
            if len(node.xpath('./a/@href')) > 0:
                title = node.xpath('./a/b/text()')[0]
                sub_url_list.append((sub_url, title))
        #
        base_url = 'http://www.netbian.com/'
        for sub_url, title in sub_url_list:
            s_page = base_url + sub_url
            s_resp = requests.get(s_page)
            s_tree = etree.HTML(s_resp.content)
            img = s_tree.xpath('/html/body/div[2]/div[2]/div[3]/div/p/a/img/@src')[0]
            suffix = img.split('.')[-1]
            img_content = requests.get(img).content
            with open(f'./image/{title}.{suffix}', 'wb') as f:
                f.write(img_content)
                f.close()
        t2 = time.time()
        print(t2-t1)

  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接