记录使用过的特殊 Python API

1、获得文件夹中所有文件的名称列表(Mac环境)

Mac环境下,隐藏文件为".DS_Store"

os.listdir()函数得到的是仅当前路径下的文件名,不包括子目录中的文件,所有需要使用递归的方法得到全部文件名。

import os
import json

path = 'Users/juanmao/Desktop/xxx'
files = os.listdir(path)

for file in files:
    # 判断是否是文件夹
    if not os.path.isdir(file):
        # 判断是否是隐藏文件:.DS_Store
        if not file.endsith(".DS_Store"):
            # 打开文件
            f = open(path + "/" + file)
            fileJson = json.load(f)
            book_list = fileJson['data']['books']
            for book in book_list:
                print('\n')
                print(book[title])
                print(book[author])
                print(book[score])

题外知识:

.DS_Store是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows的desktop.ini。

1,禁止.DS_store生成:

打开 “终端” ,复制黏贴下面的命令,回车执行,重启Mac即可生效。

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

2,恢复.DS_store生成:

defaults delete com.apple.desktopservices DSDontWriteNetworkStores

2、os.path.splitext() 方法:

该方法返回两个元素, 第一个是路径去掉后缀的部分, 第二个是文件后缀。(图片引用他人)

3、request库请求网页,返回乱码处理

3.1使用chardet

import requests
import chardet

headers = {
            "xxx": "xxx"
        }

r = requests.get(url, headers=headers)
r.raise_for_status()

# 获取网页编码格式 chardet有概率误识
charset_dict = chardet.detect(r.content)
charset = charset_dict.get("encoding")
print("网页编码:" + str(charset))
r.encoding = charset

备注:抓取百度网页的时候,解析某些网页还是会出现乱码

3.2从网页html的meta中抽取

import requests


headers = {
            "xxx": "xxx"
        }


r = requests.get(url, headers=headers)
r.raise_for_status()


print("网页编码:" + str(requests.utils.get_encodings_from_content(r.text)))
# 可以查看获取的list,选择字符编码
r.encoding = requests.utils.get_encodings_from_content(r.text)[0]

备注:这种方式相对准确,以上使用chardet方式解析百度网页字符编码出现乱码的情况,此种方式能解决

4、代码输出异常信息(使用traceback库)

import traceback

url="https://www.baidu.com"

headers = {
    "xxx": "xxx"
}

r = requests.get(url, headers=headers)
r.raise_for_status()
html = r.text

'''
lxml的方式解析页面
'''
try:
    xpath_html = etree.HTML(html)
    a_title_list = xpath_html.xpath(
        "//div[@id='wrapper']/div[@id='wrapper_wrapper']/div[@id='container']/div[@id='content_left']/div[@id='1']//h3/a")
    result = ''
    for a_title in a_title_list:
        result = result + a_title.xpath("string(.)").strip().replace("\n", "") + " "
except Exception as err:
    traceback.print_exc()

5、识别字符串是否是乱码

背景:抓取某些网页的内容为乱码。调用以下函数识别乱码,后续对乱码进行处理

def if_contain_chaos(keyword):
    try:
        '''
        使用gb2312编码集时,
        gbk是gb2312的扩展,更能准确的识别乱码,误识率较低
        '''
        # keyword.encode("gb2312")
        keyword.encode("gbk")
    except UnicodeEncodeError:
        return True
    return False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值