摘要:驱动 首先,要保证机子上装了谷歌浏览器 然后,下载浏览器驱动 chromedriver.exe 最新版本:https://googlechromelabs.github.io/chrome-for-testing/ 老版本:https://chromedriver.storage.googleapi
阅读全文
摘要:ChromeOptions 是 Selenium 库中的一个类,用于配置 Chrome 浏览器的启动参数和功能。 通过 ChromeOptions,用户可以自定义浏览器的行为,以满足不同的测试或爬虫需求。 主要功能: 页面加载策略:可以设置页面加载策略,例如使用eager模式加快页面加载速度,
阅读全文
摘要:xpath 常用规则 |表达式 |功能 | | | | |nodename |选取此节点的所有子节点 | |/ |从根节点选取(取子节点) | |// |从匹配的节点中选择子节点(不需要考虑位置) | |. |选取当前节点 | |.. |选取当前节点的父节点 | |@ |选取属性 | |* |匹配任
阅读全文
摘要:CSS SELECTOR 功能:分析静态 html 代码,定位到具体的界面元素。 名字中有 CSS,所以与前端的 CSS 样式(Cascading Style Sheets)真的有关, 在样式中,通过选择器定位元素,进行界面渲染;而爬虫通过选择器定位元素,进行界面抓取, 二者有着类似的 API,前端
阅读全文
摘要:安装依赖库 pip install selenium helloworld 效果:弹出浏览器,输入 python,之后自动点击 “百度一下”,5秒之后关闭浏览器。 import time from selenium import webdriver from selenium.webdriver.c
阅读全文
摘要:使用场景:登录之后,只要保持会话,就可以持续访问接口。 需要注意会话保持,登录之后不要断线; 为了防止 CSRF 攻击,登录参数除了账号密码,有时候还会有个 token,这个要通过爬虫抓取; import requests # 目标网站的登录URL login_url = 'http://examp
阅读全文
摘要:抓取静态界面 import requests headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 S
阅读全文
摘要:这里只是给出一个思路,或许对于未来解决问题有一些参考意义。 仿 JAP 的写法 这种写法很像 java 环境中的 JPA,如果引入模版引擎,则可以大幅增强实用性。 但是,在 python 环境中,这不符合主流的 ORM 框架。 潜在风险:代码检测的时候,可能会被误判,因为我们定义了一大堆空的函数。
阅读全文
摘要:这是一个 ORM 框架(已经包含连接池) 安装插件 pip install pymysql sqlalchemy 参数配置 from sqlalchemy import create_engine, text # 定义数据库连接字符串 DATABASE_URI = 'mysql+pymysql://
阅读全文
摘要:python 与 mysql 交互,能找到两个库 pymysql 和 mysql-connector-python 因为两个都是基于 DB-API 2.0 标准,使用上差别并不大,区别就是 mysql-connector-python 是由 Oracle 官方提供,性能可能会好一些。 安装依赖 p
阅读全文
摘要:日志配置 import logging from logging.handlers import TimedRotatingFileHandler # NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL # 创建一个 logger logger =
阅读全文
摘要:功能:安装各种插件,功能与 maven 类似 windows 环境下,安装包中自带这个插件,检查路径 ./Scripts,如果包含 pip.exe 文件,则无须安装 安装 官网:https://pip.pypa.io/en/stable/installation/ Download the scri
阅读全文
摘要:with 用法很像 java 中的 try(){} 代码块,调用对象之后,会自动执行资源释放函数。 在 python 中,要使用 with 语句,需要实现两个特殊方法:__enter__和__exit__。 比如: class Session: def __enter__(self): print(
阅读全文
摘要:关系运算 关系运算符,所有的语言含义一样 关系运算符 说明 == 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 逻辑运算(与或非) python 的逻辑运算跟 java 相比,简直就是奇葩。 python 允许不同数据类型之间进行比较,而且,运算的结果也不是布尔值,比如:数
阅读全文
摘要:import types import logger_factory import typing # 从 import 的对象中,直接获取属性 logger = getattr(logger_factory, "logger") print(logger) # 通过 class 创建对象 class
阅读全文
摘要:功能:给线程创建一些变量,线程彼此之间是完全隔离的,每个线程使用各自的线程。 常用场景: 数据库会话 业务开始时,获取连接,业务结束时,关闭连接,中间的业务是未知的。这种场景下,想要管理数据库连接,通常要用 threadlocal。 处理上下文 做后台接口的时候,需要获取登录的用户信息,任何业务都可
阅读全文
摘要:创建一个列表时,系统会分配一定的空间,当新增元素个数超出这个空间时,会自动进行扩容。 这个结论很容易找到,我们可以写一段代码证明一下,内存占用是阶段变化的。 from sys import getsizeof li = [] for i in range(64): li.append(i) prin
阅读全文
摘要:字典(dict):基于哈希表的一种数据结构,从原理上来说,与其它语言中的 map 是同一类东西。 # 创建一个空字典 import json ordered_dict = {'a': 1} print(ordered_dict) # 向字典中添加一些键值对 ordered_dict['b'] = 2
阅读全文
摘要:例举一下常规用法 print('字符串定义') str1 = 'str' str2 = "str" # 声明段落 str3 = ''' paragraph ''' # 使用续行符 str4 = "line1\ line2" print('字符串拼接') ret = str1 + ' ' + str2
阅读全文
摘要:基础数据类型 基础数据类型 空值(none) 整数(int) :表示整数,例如 x = 2。 浮点数(float) :表示带有小数点的数值,例如 y = 1.23。 复数(complex) :包含实部和虚部的数值,例如 z = 4 + 4j。 布尔值(bool) :表示真(True)或假(False
阅读全文
摘要:Exception 和 Error 的区别 python 与 java 不一样,python 的所有异常类,都继承自 BaseException ,并不严格区分 Error 和 Exception。 以 SyntaxError 为例,名字虽然叫 Error,但实际也是继承自 Exception。 j
阅读全文
摘要:Python 装饰器(Decorator) ,名字叫装饰器,功能自然对应于设计模式中的装饰者模式(代理模式)。 写法上,很像 java 中的函数注解,实际上,功能也大致一样。 简单说:就是在调用函数的时候,可以在在调用之前,加一点逻辑,调用完加一些逻辑,出现异常时加一些逻辑。 用途很多:入参的校验,
阅读全文
摘要:import 语法 python 中包要包含一个空的 init.py 文件 # 引用同级目录的 a.py import a # 向上一级文件夹,引用 imath(同一个包才能这么调用,如果是主模块会报错) from .. import imath # 向上两级文件夹,引用 imath(同一个包才能这
阅读全文
摘要:标准写法 定义一个函数,函数名叫 summary(), 函数有两个参数:a 和 b,a 的默认值为 1 ,b 的默认值为 2; :int 指定参数为 int 类型(注解); -> int 指定返回值为 int(注解); r""" """是标准的函数注释; 要是空函数,还没想好功能,用 pass 进行
阅读全文
摘要:面向内容与 java 一致,包含三大特点:封装、继承和多态。 定义一个对象 class Person: # 构造函数 def __init__(self, name, age): self.name = name self.age = age # 定义一个函数 def say_hello(self)
阅读全文