一月份的时候有写过一篇文章,是关于如何解析网站,然后将图片下载下来,爬虫爬取美女图片存入到动态的文件夹中
今天主要总结的是爬虫的一个基本思路,主要有:
1.获取一个网页get_one_page()
我们知道一个网页可能由多个参数构成,我们可以传参进去。
2.分析一个网页,获取有用的信息parse_one_page()或者获取图片下载save_one_image()
我们可以通过正则表达式或者第三方插件BeautifulSoup(或者其他插件)解析html文件,然后获取自己有用的信息
3.将获取的信息存储起来
当我们获取到了我们需要的信息后,我们可以存储到Excle,TXT,CSV,或者数据库中
4.main()函数处理流程
我们可以通过一个主流程函数传入参数进行逻辑处理,然后传参数到get_one_page(),parse_one_page(),最后存储起来。
下面我们通过一个列子解释一下:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:getBeauty.py
#日期:2018-05-13
#备注:get_one_page()函数传参控制url并转化为可解析内容;save_one_image()函数获取图片路径并下载文件;main()函数进行传参循环下载图片
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# F:\python_env\PaChong_env
# -*- coding: utf-8 -*-import os
import requests
import urllib.request
from urllib.parse import urlencode
from bs4 import BeautifulSoup
from tqdm import tqdmdef get_one_page(beauty,page):paras = {'id' : beauty, #某个美女的id'mm' : page #每个美女有多张图片,每张对应一页}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}url = 'http://www.xingmeng365.com/articles.asp?' + urlencode(paras)# 获取网页内容,返回html数据response = requests.get(url, headers=headers)response.encoding = 'gb2312'print("当前爬取的网址为:" + url)return response.textdef save_one_image(html,path,id,mm):soup = BeautifulSoup(html,'lxml')for link in soup.find_all('img'):if "/upload/image" in link.get('src'):image_url = link.get('src')if id <= 6:image_url = "http://www.xingmeng365.com/" + image_url[6:]else:image_url = "http://www.xingmeng365.com/" + image_url[1:] # id=7以后,[6:]改为[1:]fileName = soup.find('h1').get_text()os.chdir(path)image_path = str(id) + '-' + str(fileName)if not os.path.exists(image_path):print("开始创建文件夹:" + str(fileName))os.makedirs(image_path)os.chdir(image_path)print("开始下载第" + str(mm) + "张图片:" + image_url)# 可以自定义命名图片名称,好检索file = open(str(id) + '-' + str(mm) + '.jpg', "wb")req = urllib.request.Request(url=image_url)try:image = urllib.request.urlopen(req, timeout=20)pic = image.read()except Exception as e:print("第" + str(mm) + "张图片访问超时,下载失败:" + image_url)continuefile.write(pic)print("第" + str(mm) + "张图片下载成功")file.close()def main(start_id,end_id,page,path):for id in tqdm(range(start_id,end_id)):for mm in range(1,page):html = get_one_page(id,mm)save_one_image(html,path,id,mm)if __name__ == '__main__':main(124, 760, 60, 'F:\Lingwei\AllPhoto')