异常处理
try:
print(1/0) # 有错误就跳过,没错误就执行
except ZeroDivisionError: # 错误被捕捉
pass # 什么也不做
try:
key = input('请输入一个key来获取相应的值')
dic = {'a': 1}
dic[key] # KeyError
except Exception as e: # Exception万能异常 把错误信息输出,同时一般把错误记录到日志中
logging.info(e) # 给程序员看
print('请输入正确的key') # 给用户看
# 预运行(类似把代码抽离到另外一个文件中运行,这样的运行对本文件不会造成任何影响),能不用则不用
LeetCode使用之两数之和(示例)
给定一个整数数组(列表) nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例1:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
# 需求1: 在该数组中找出和为目标值的那 两个 整数
# 需求2: 返回他们的数组下标
# 条件: 你不能重复利用这个数组中同样的元素
nums = [2, 7 11, 15]
target = 9
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + num[j] = target:
return i,j
# 循环一次,用减法得到结果,判断是否在nums内
nums = [2, 7 11, 15]
target = 9
for i in range(len(nums)):
sub = target - nums[i]
if sub in nums:
res = nums.index(sub)
if r
return i,res
字符串内置方法
# 内置方法:自带的方法(提前安排好的,会用就行了)
# 字符串的内置方法:只有字符串才能使用,列表不能用
s = 'nick handsome'
# 0123
# 1. 索引取值
print(s[0])
# 2. 切片
print(s[0:4])
# 3. 成员运算
print('nick' in s)
print('nick1' in s)
s = 'nick handsome'
# 4. for循环
for i in s: # n i c k h a
print(i)
# 5. len()
print(len(s))
# 接下来讲的都是字符串.出来的方法
s = '**** ni ck '
print(s)
# 6. strip(): 默认去掉两端空格,可以
# print(s.strip()) # 去空格
# print(s.strip('*')) # 去*
print(s.strip('n* ')) # 去 和*和n
# 7.lstrip()/rstrip(): 左端/右端
s = '**nick**'
print(s.lstrip('*'))
print(s.rstrip('*'))
# 8.startswith()/endswith(): 以。。开头/以。。结尾
s = 'nick'
print(s.startswith('nick'))
print(s.endswith('k'))
# 9.find()/index() : 获取某一个元素的索引位置
s = 'nick'
print(s.find('a')) # 找不到返回-1
# print(s.index('a')) # 找不到报错
# 10.join() : 把列表内的元素拼接出来
print('*'.join(['a', 'b', 'c']))
# 11.split(): 切割
s = 'a*b*c'
print(s.split('*')) # 以*为切割符号,切割字符串
# 12.center/ljust/rjust : 打印更美观,居中/居左/居右
print(s.center(50, '-'))
print(s.ljust(50, '-'))
print(s.rjust(50, '-'))
# 13.isdigit()/isalpha()
s = 'a'
print(s.isdigit()) # 是否为纯数字
print(s.isalpha()) # 是否为纯字母
# 14.count(): 计数
s = 'nick nick'
print(s.count('nick'))
# ctrl+alt+l --> 让他符合pep8标准(python创始人规定了代码的风格)
爬虫基础3
selenium基本使用
# 导入webdriver驱动浏览器
from selenium import webdriver
import time
# 通过 webdriver 驱动浏览器加载驱动
# webdriver.Chrome('驱动绝对路径')
driver = webdriver.Chrome(r'D:\chromedriver\chromedriver.exe')
try:
# 等待浏览器数据加载10秒
driver.implicitly_wait(10)
driver.get(r'https://www.baidu.com/') # 输入百度网址
# 找到搜索框并输入python
input_tag = driver.find_element_by_id('kw')
input_tag.send_keys('python')
# 找到百度一下按钮并点击
submit_tag = driver.find_element_by_id('su')
submit_tag.click()
# 等待10秒
time.sleep(10)
finally:
driver.close()
selenium模拟百度登录
from selenium import webdriver
import time
# 通过webdriver加载驱动
driver = webdriver.Chrome(r'D:\chromedriver\chromedriver.exe')
try:
# 打开浏览器访问百度主页
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
# 通过文本找到登录按钮并点击
login_botton = driver.find_element_by_link_text('登录')
login_botton.click()
time.sleep(3)
# 通过id找到用户名登录按钮并点击
user_login_tag = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
user_login_tag.click()
time.sleep(3)
# 通过id找到账号输入框并输入
id_input = driver.find_element_by_id('TANGRAM__PSP_10__userName')
id_input.send_keys('18895317622')
time.sleep(3)
# 通过id找到密码输入框并输入
password_input = driver.find_element_by_id('TANGRAM__PSP_10__password')
password_input.send_keys('0123456')
time.sleep(3)
# 找到并点击登录按钮
submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
submit.click()
time.sleep(10)
finally:
driver.close()
selenium爬取京东商品信息
from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 键盘按键操作
import time
try:
# 加载驱动
driver = webdriver.Chrome(r'D:\chromedriver\chromedriver.exe')
# 打开京东首页
driver.implicitly_wait(10)
driver.get('https://www.jd.com/')
time.sleep(5)
# 通过id找到搜索栏并搜索'手机'
ser_bar = driver.find_element_by_id('key')
ser_bar.send_keys('手机')
# 模拟键盘按enter键
ser_bar.send_keys(Keys.ENTER)
time.sleep(5)
# 按销量排序
# 按文本找到销量按钮并点击
sales_volume_botton = driver.find_element_by_link_text('销量')
sales_volume_botton.click()
time.sleep(5)
# 通过id查找所以商品的父标签
goods_div = driver.find_element_by_id('J_goodsList')
# 通过class查找goods.div所以li标签
goods_list = goods_div.find_elements_by_class_name('gl-item')
# 循环获取goods_list里每一个li标签
for goods in goods_list:
# 获取价格文本
# css 属性选择器
# 通过css_selector获取商品价格
goods_price = goods.find_element_by_css_selector('.p-price i').text
# 通过css_selector获取商品名称
goods_name = goods.find_element_by_css_selector('.p-name em').text
# 通过css_selector获取商品评价人数
goods_commit = goods.find_element_by_css_selector('.p-commit a').text
# 通过css_selector获取商品详情链接
goods_url = goods.find_element_by_css_selector('.p-commit a').get_attribute('href')
goods_data = f'''
商品名称: {goods_name}
商品价格: {goods_price}
评价人数: {goods_commit}
商品详情: {goods_url}
'''
# 保持数据
with open('jd goods list.text', 'a', encoding='utf-8') as f:
f.write(goods_data)
time.sleep(10)
finally:
driver.close()