爬虫常用操作

1、os模块的使用:

-----创建文件夹:

(1)判断是否存在picture文件夹,有的话不动,没有的话创建

    target_dir = r'D:/picture'
    if os.path.exists(target_dir):
        if not os.path.isdir(target_dir):
            os.remove(target_dir)
    else:
        os.mkdir(target_dir)
(2)创建文件夹和文件名
# 在D盘中创建文件夹和文件夹名
path = 'D:'
filename = 'pictures'
# 没有not时,创建文件夹。加not为存在文件夹时,继续存入。---if not...

os.path.isdir(path)         # 判断指定路径是否存在且是一个目录                                                                       

os.mkdir(os.path.join(path, filemane))     #创建建单层目录,如果该目录已存在则抛出异常,若但用os.mkdir('hahha'),则创建一个叫哈哈哈的文件
# os用法汇总
 """
  os对象方法:
      os.getcwd()             #返回当前工作目录
      os.chdir(path)             #改变工作目录
      os.listdir(path=".")     #列举指定目录中的文件名("."表示当前目录,“..”表示上一级目录)
     os.mkdir(path)             #创建建单层目录,如果该目录已存在则抛出异常
     os.makedirs(path)         #递归创建多层目录,如该目录已存在抛出异常,
     os.remove(path)         #删除文件
     os.rmdir(path)             #删除单层目录,如该目录非空则抛出异常
     os.removedirs(path)     #递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
     os.rename(old,new)         #将文件old重命名为new
     os.system(command)         #运行系统shell命令
     os.walk(top)             #遍历top路径以下所有子目录,返回一个三元组:(路径,[包含目录],[包含文件])
     os.curdir                #属性,表示当前目录
     os.pardir                #属性,表示上一级目录
     os.sep                    #属性,输出操作系统特定的路径分隔符(win下为'\\',Linux下为'/')
     os.linesep                #属性,当前平台使用的行终止符(Win下为‘\r\n’,Linux下为'\n')
     os.name                    #属性,指待当前使用的操作系统
     
  os.path对象方法:
     os.path.basename(path)    #去掉目录路径,单独返回文件名
     os.path.dirname(path)    #去掉文件名,单独返回目录路径
     os.path.join(path1[,],path2[,...]) #将path1,path2各部分组成一个路径名
     os.path.split(path)        #分割文件名和路径,返回一个(f_path,f_name)元组,如果完全使用目录,它也会将最后一个目录作为文件名分离
     os.path.splitext(path)    #分离文件名和后缀名,返回(f_name,f_extension)元组,如果完全使用目录,它也会将最后一个目录作为文件名分离
     os.path.getsize(file)    #返回指定文件的尺寸,单位是字节
     os.path.getatime(file)    #返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
     os.path.getctime(file)    #返回指定文件的创建时间
     os.path.getmtime(file)    #返回指定文件最新的修改时间
     os.path.exists(path)    #判断指定路径是否存在(目录或者文件)
     os.path.isabs(path)        #判断是否为绝对路径
     os.path.isdir(path)        #判断指定路径是否存在且是一个目录
     os.path.isfile(path)    #判断指定路径是否存在且是一个文件
     os.path.islink(path)    #判断指定路径是否存在且是一个符号链接
     os.path.ismount(path)    #判断指定路径是否存在且是一个挂载点
     os.path.samefile(path1,path2)    #判断path1,path2是否指向同一个文件
        
 """


2、使用urllib进行解码操作

在网站网址中经常会有中文解码后的如 '%E8%94%A1%E5%90%9B%E5%A6%82' (百分号+两个十六进制数)

-----将中文解码为url编码格式的方法:

import urllib
from urllib import request
a = '哈哈哈'
b = urllib.request.quote(a)
# >>>b
# >>>'%E5%93%88%E5%93%88%E6%98%AF'
c = urllib.request.unquote(b)
# >>>c
# >>>'哈哈哈'

有时需要注意不同浏览器的编码问题(如百度为gbk,谷歌为utf-8)

----处理方法如下:

import sys,urllib 
from urllib import request
s = '丽江'
urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
# >>>'%C0%F6%BD%AD'
 urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
# >>>'%E4%B8%BD%E6%B1%9F'


3、re模块进行筛选

import re 
import requests
url = 'www.baidu.com'
response = requests.get(url)
html = response.text
# 寻找"objURL":"和",中间的所有字符
img_urls = re.findall(r'"objURL":"(.*?)",',html) 


4、下载,保存文件

resp.text返回的是Unicode型的数据。

resp.content返回的是bytes型也就是二进制的数据。

也就是说,如果你想取文本,可以通过r.text。

如果想取图片,文件,则可以通过r.content。

(resp.json()返回的是json格式数据)

如下载并保存一张图片:

import requests

jpg_url = 'http://img2.niutuku.com/1312/0804/0804-niutuku.com-27840.jpg'

content = requests.get(jpg_url).content

with open('demo.jpg', 'wb') as fp:
    fp.write(content)

将字符串保存为txt:

path = r'D:/station.txt'
# 用a模式
with open (path,'a') as f:
    f.write(i)
    f.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值