美文网首页
Python 爬虫实战计划:第一周第四节作业

Python 爬虫实战计划:第一周第四节作业

作者: 4ffde5305e8f | 来源:发表于2016-12-30 13:46 被阅读0次

第三节:爬取美女图片
爬取要求:
1. 爬取http://weheartit.com/inspirations/taylorswift网站的所有美女图片
2.下载图片到本地文件夹内
重点在于:
1. 异步加载地址链接的获取。
链接地址在:浏览器 --> F12 --> NetWork --> XHR
向下滑动网页,使其产生异步通信,获得异步通信中的真实url地址
before参数没用,可以删除。

image.png
2. 图片的下载:
图片下载之前,要检查是否已经下载过了,避免重复的下载
img_list = os.listdir('imgs') if img_name in img_list: print '文件已经下载 {}'.format(url)

代码如下:

#coding=utf-8
import os
import time
import urllib
import requests
from bs4 import BeautifulSoup

def get_img_links(url):
    """获取当前页的所需的所有图片链接url
        返回一个list"""
    time.sleep(1) #延迟1秒
    headers = {
        'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                       'Chrome/54.0.2840.87 Safari/537.36')
    }
    html = requests.get(url,headers=headers).text
    soup = BeautifulSoup(html,'lxml')
    imgs = soup.select('img.entry-thumbnail')
    img_links = [img.get('src') for img in imgs]

    print '当前页图片链接个数 {}'.format(len(img_links))
    return img_links

def down_img(urls,file_name):
    """下载图片,保存到指定文件夹内 以图片id为文件名
        http://data.whicdn.com/images/115947809/superthumb.jpg
        图片id为 115947809 """
    if not os.path.exists(file_name): #如果文件夹不存在,则建立一个新的文件夹
        print '文件夹不存在,重新建立 {} 文件夹'.format(file_name)
        os.mkdir(file_name)  #使用os.mkdir建立文件夹,如果需要建立嵌套文件夹 如:/a/b 则需要使用 os.makedirs()

    for url in urls:
        img_suffix = os.path.splitext(url)[1] #图片文件后缀 .jpg
        img_name = url.split('/')[4] + img_suffix
        img_path = os.path.join(file_name,img_name)

        # 下载文件并保存到文件夹内
        # 如果文件已存在文件夹呢,则跳过,避免重复下载
        img_list = os.listdir('imgs')
        if img_name in img_list:
            print '文件已经下载 {}'.format(url)
        else:
            #urlretrieve(url,filename) 传入文件url,文件路径(包括文件名例如/imges/134.jpg),下载文件到本地
            urllib.urlretrieve(url, img_path)
            print '下载图片 -- {} ,保存路径 -- {}'.format(url, img_path)
def main():
    """主函数,启动爬虫"""
    #拼接前20页的page_url
    page_url = 'http://weheartit.com/inspirations/taylorswift?scrolling=true&page={}'
    page_url_list = [page_url.format(index) for index in range(1,21)]
    print '总共 {} 页'.format(len(page_url_list))

    #获取每一页中的美女图片,并保存到文件夹imgs内
    img_urls = []
    for url in page_url_list:
        img_urls.extend(get_img_links(url))
    print '总共 {} 张图片'.format(len(img_urls))

    down_img(img_urls, 'imgs')
    print '总共下载 {} 张图片'.format(len(os.listdir('imgs')))


if __name__ == '__main__':
    main()

相关文章

网友评论

      本文标题:Python 爬虫实战计划:第一周第四节作业

      本文链接:https://www.haomeiwen.com/subject/owsmvttx.html