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

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()
网友评论