Python学习笔记:本地文件处理和抓包

Python 无疑是目前最热的编程语言了,从小学生到老大爷,都乐此不疲。作为程序员如果不跟下时髦,恐怕是不行的。
个人感觉 Python的学习曲线还是比较平和的,比较容易入门。

可以说大数据和人工智能的兴起推动了Python的进一步发展,Python最大的优点就是简单易用。
Python有着直观的语法并且还是个强大的多用途语言。这一点在大数据分析环境中很重要。
Python是开源的,并且有很多用于数据科学的类库。
大数据市场急需Python开发者,不是Python开发者的专家也可以以相当块速度学习这门语言,从而最大化用在分析数据上的时间,最小化学习这门语言的时间。

Python到底能做什么?它的优点在哪?

1、数据库:Python在数据库方面很优秀,可以和多种数据库进行连接,进行数据处理,从商业型的数据库到开放源码的数据库都提供支持。例如:Oracle, My SQL Server等等。有多种接口可以与数据库进行连接,至少包括ODBC。有许多公司采用着Python+MySQL的架构。因此,掌握了Python使你可以充分利用面向对象的特点,在数据库处理方面如虎添翼。

2、多媒体:利用PIL、Piddle、ReportLab等模块,你可以处理图象、声音、视频、动画等,从而为你的程序添加亮丽的光彩。动态图表的生成、统计分析图表都可以通过Python来完成。

3、web开发框架:django是流行的web开发框架,使用优雅的python语言写成。采用MVC的软件设计模式,主要目标是使得开发复杂的、数据库驱动的网站变得简单。

4、科学计算说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。

5、网络编程: Python可以非常方便的完成网络编程的工作,提供了众多的解决方案和模块,可以非常方便的定制出自己的服务器软件,无论是c/s,还是b/s模式,都有很好的解决方法。

6、游戏编程:Python在很早的时候就是一种游戏编程的辅助工具。在《星球大战》中扮演了重要的角色。目前,通过Python完全可以编写出非常棒的游戏程序。

再来看看Python 的缺点

– 强制缩进,其实说实话我觉得这没什么。

– 单行语句和命令行输出问题:很多时候不能将程序连写成一行,如import sys;for iin sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。(对很多用户而言这也不算是限制)

下面是我写的一个小功能,从一个阿里巴巴网站爬取商品图片,然后过滤不符合要求的尺寸的图片。
其中用的了os 对本地文件进行操作
用到了PIL 进行图片的操作
用到了requests 请求网络资源等
代码其实很简单,没有什么难度。主要是通过这个,熟悉下Python代码一些基础语法和代码风格。

# coding:utf-8
# 引入requests包和正则表达式包re
import requests
import re
import json
import os
from PIL import Image
import os.path
import shutil

# 创建文件夹
def create_dir(dirName):
    print(os.path.exists(dirName))
    if os.path.exists(dirName) == False:
        try:
            os.mkdir(dirName)
        except IOError:
            print "Error: mkdir fail"
        else:
            print "Error: mkdir success"

# 自定义下载页面函数
def load_page(url):
    response=requests.get(url)
    data=response.content
    return data
 
# 自定义保存页面图片函数
def get_image(html):
    # data-src="//sc02.alicdn.com/kf/HTB1rSwmKf5TBuNjSspcq6znGFXa8/229147583/HTB1rSwmKf5TBuNjSspcq6znGFXa8.jpg"
    # regx=r'https.*?jpg'  # 定义图片正则表达式
    pattern=re.compile('<img src="(//.*?jpg)"',re.S)
    # re.compile('http.*?jpg', re.S) # 编译表达式构造匹配模式
    # setting = json.dumps(html)
    # print(setting['component'])
    get_images=re.findall(pattern,html) # 在页面中匹配图片链接
    # get_images = re.findall(r"https.*?jpg",html)
    print(get_images)
    header={
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 
        }
    num=1
    # 遍历匹配成功的链接
    for img in  get_images:
        image = requests.get('http:'+img, headers=header).content
        # 将下载的图片保存到对应的文件夹中
        with open('./inter/%s.jpg' % num,'wb') as fb:
            fb.write(image)
            print("正在下载第%s张图片" %num)
            num=num+1
    print("下载完成!")
# 定义爬取页面的链接
url ='https://www.alibaba.com/product-detail/Wholesale-luxury-waterproof-printable-Tyvek-paper_60797884668.html?spm=a2700.7724838.2017115.61.2fb9444clzUhmx'
# 调用load_page函数,下载页面内容
html = load_page(url)

# 在页面中,匹配图片链接,并将图片下载下来,保存到对应文件夹
get_image(html)



# cut 文件 到目标目录
def cut_files(filename, sourceDir, targetDir):
    try:
        shutil.copy(sourceDir+filename,targetDir+filename)
    except IOError:
        print "Error: cut图片失败"
    else:
        os.remove(sourceDir+filename)
temp_dir = 'temp3'
create_dir(temp_dir)
# 
# join path and filename
def path_join(path,filename):
    return path + '/' + filename

print  'os.getcwd():' + os.getcwd()
rootdir = os.getcwd() + '/inter'
for parent, dirnames, filenames in os.walk(rootdir):
    # Case1: traversal the directories
    for dirname in dirnames:
        print("Parent folder:", parent)
        print("Dirname:", filenames)
    # Case2: traversal the files
    for filename in filenames:
        print("Parent folder:", parent)
        print("Filename:", filename)

        try:
            # 打开一个jpg图像文件,注意是当前路径:
            img = Image.open(path_join(rootdir,filename))
            # 获得图像尺寸:
            w, h = img.size
            # print('Original image size: %sx%s' % (w, h))

        except IOError:
            print "Error: 没有找到文件或读取文件失败,执行删除"
            cut_files(filename,'./inter/','./'+temp_dir+'/')
        else:
            # print "内容写入文件成功"
            # print('Original image size: %sx%s' % (w, h))
            if w <= 300:
                print('Original image size: %sx%s' % (w, h))
                os.remove('./inter/'+filename) 

发表评论

记录工作生活点滴。

返回
顶部