小小前端浅学一下Python-6(进阶篇)

170 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

Python专题的文章收录于专栏:Python专栏

1.爬虫带参数请求数据

url由两部分组成:

  • 前半部分:大多形如xx.xx.xxx/xxx/xxx

  • 后半部分:大多形如xx=xx&xxx=xxx&……

  • 前半部分使我们请求的地址,后半部分是请求所附带的参数

  • 可用字典的形式,利用params参数传入参数

示例:

payload = {'key1':'value','key2':'value2'}
r = requests.get("http://httpbin.org/get",params=payload)

url前后部分用‘?’或‘#’分隔,功能一样(‘#’可替换成‘?’,‘?’不一定可替换成‘#’)

Request Headers

  1. user-agent(用户代理):记录电脑信息和浏览器版本

  2. origin(源头)和referer(引用来源):记录这个请求最初起源来自哪个页面,referer携带信息更多

#若想告知服务器自己是一个浏览器,则需修改user-agent,利用requests模块去修改Headers的值
url = "https://api.github.com/some/endpoint"
headers = {'user-agent':'my_app/0.01'}
r = requests.get(url,headers=headers)
#用法与params类似

2. openpyxl模块

用于操作Excel文件

  • 导入模块
import openpyxl
  • 写入
  1. 首先需要创建一个Workbook对象wb,即一个空的Excel文件
  2. 通过wb.active获取工作表,这个工作表中可以设置title名字
  3. 如果需要往工作表中插入数据,有两种方式:
    1. 通过sheet[单元格名称]来设置
    2. 通过sheet.append(一个数组)——插入一行 因此如果需要添加多行数据,可以通过for循环实现
  4. 写完数据后需要保存,传入的参数是文件名
wb = openpyxl.Workbook()   #创建新的Workbook对象(空的Excel文件)
sheet = wb.active   #获取该工作簿的活动表,通常为第一个工作表
sheet.title = 'new title'   #给工作表重命名
sheet['A1'] = '漫威宇宙'   #将‘漫威宇宙’写入A1单元格
row = ['美国队长','钢铁侠','蜘蛛侠']   
sheet.append(row)   #往表格里添加一行文字(参数以列表形式传入)
rows = [['美国队长','钢铁侠','蜘蛛侠'],['是','漫威','宇宙','经典','人物']]  
for i in rows:   #往表格里添加多行文字(利用for循环)
    sheet.append(i)
wb.save('Marvel.xlsx')   #保存文件,括号内为保存文件名
  • 读取
  1. 首先需要打开文件并读取到变量wb
  2. 其次也是获取到工作表,可以通过wb[‘表名’]的方式
  3. 注意如果需要读取某个单元格的数据,不能仅通过sheet['单元格']来获取,这种方式获取的是整个单元格对象,需要获取其中的value值
wb = openpyxl.load_workbook('Marvel.xlsx')   #打开文件
sheet = wb['new title']   #获取工作表
sheetname = wb.sheetnames   #获取工作簿的所有工作表名字
print(sheetname)
A1_cell = sheet['A1']   #将A1单元格赋值给A1_cell
A1_value = A1_cell.value   #获取A1单元格的值
print(A1_value)

3. csv模块

  • 导入模块
import csv
  • 写入
  1. 同样首先打开文件,在open()方法里可以川力文件名,打开方式,编码等参数
  2. 注意这里的newline=''是为了避免出现两倍行距,encoding='utf-8'是为了定义编码方式,防止出现乱码
  3. 紧接着创建一个writer对象,用于对文件进行写操作
  4. 对文件的写操作执行完毕后一定要记得关闭文件
csv_file = open('demo.csv','w',newline='',encoding='utf-8')   #创建一个名为‘demo.csv’的csv文件
#newline可避免csv文件出现两倍行距,encoding避免编码问题导致的报错或乱码
writer = csv.writer(csv_file) 
writer.writerow(['电影','豆瓣评分'])   #写入一行文字
csv_file.close()   #关闭文件
  • 读取
  1. 首先也需要打开文件,传递的打开方式参数应该是r
  2. 创建一个reader对象后就可以直接从其身上读取数据了
csv_filr = open('demo.csv','r'newline='',encoding='utf-8')
reader = csv.reader(csv_file)   #创建一个reader对象
for row in reader:   #遍历reader对象的每一行
    print(row)

4. cookie

post请求方式:请求的参数不会直接显示,隐藏起来(get则会全部显示)

post请求应用于向网页体检数据,比如提交表单类型数据(账号密码就是网页表单数据)

get请求应用于获取网页数据

拥有了用户的cookies之后就可以免登录进行一些操作了,例如下面的发评论,当然平日里我们使用的7天自动登录等功能也是利用cookies实现的

import requests
#post带着参数地请求登录
url = '......'
headers = {'User-Agent':'...'}
data = {
    'log':'...',   #账号
    'pwd':'...',   #密码
    'wp-submit':'...',
    'redirect_to':'...',
    'test cookie':'...'
}
login_in = requests.post(url,headers=headers,data=data)

#获取cookies
cookies = login_in.cookies   
url1 = '......'
data1 = {'comment':'...','submit':'...','comment_post_ID':'...','comment_parent':'...'}

#带cookies去请求发表评论
comment = requests.post(url1,headers=headers,data=data1,cookies=cookies)
print(comment.status_code)

session  

服务器用来记录特定用户会话的信息

带着cookies请求时,服务器会返回和这个用户相关的session

创建一个session会话后,会自动保持你请求返回的cookies,再次发送请求时就无需携带cookies参数了

session = requests.session()   #创建一个session对象,自动保持了cookies(则上面第2个post请求无需cookies参数)

#存储cookies
import requests,json
cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)   #把cookies转成字典
cookies_str = json.dumps(cookies_dict)   #把字典转换成字符串
#将字符串写入文件存储
f = open('cookies.txt','w')
f.write(cookies_str)
f.close()

#读取cookies(与存储过程相反)
import requests,json
cookies_txt = open('cookies.txt','r')
cookies_dict = json.loads(cookies_txt.read())
cookies = requests.utils.cookiejar_from_dict(cookies_dict)
session.cookies = cookies

5. selenium

可以控制所有常见的浏览器的操作

即利用此模块可以让你的电脑自动帮你操作浏览器

  • 导入模块
from selenium import webdriver
  • 打开网页
driver = webdriver.Chrome()
driver.get('URL')   #打开网页
  • 解析页面的HTML并获取其中的元素,方便后续对其进行操作,这个步骤作为一个前端的人只能说再熟悉不过了
  • 获取页面元素的方法有:
    • find_elements_by_tag_name()
    • find_element_by_id()
    • find_element_by_class_name() 顾名思义就是分别通过标签名、id和类名获取元素
label = driver.find_element_by_tag_name('label')   #解析并提取
print(type(label))   #label属于WebElement对象
print(label.text)   #打印文本,与Tag对象类似
#WebElement对象用WebElement.get_attribute()获取属性的值
labels = driver.find_elements_by_tag_name('label')
page_source = driver.page_source   #源代码字符串
teacher = driver.find_element_by_id('teacher')   #找到输入框
teacher.send_keys('...')   #输入文字
button = driver.find_element_by_class_name('sub')   #找到按钮
button.click()   #点击按钮
#teacher.clear()   #清空输入框
  • 设置浏览器的静默模式

设置为静默模式后浏览器将会在后台运行

from selenium import webdriver
from selenium.webdriver.chrome.options import Options   #从options模块调用Options类
chrome_options = Options()   #实例化Options对象
chorme_options.add_argument('--headless')   #设置浏览器为静默模式
driver = webdriver.Chrome(options=chrome_options)   #设置引擎为Chrome,后台运行

6. schedule库

定时功能

一般可用于定时发送消息或邮件之类的,如果你有npy这将是提升两人之间甜蜜度的一种好方法哟!

例如:通过定时功能+爬虫+发送邮件(smtplib+email模块),每天早上七点定时在网上爬取一句早安语或小情话,然后发送到对象的邮箱里,我想这就是程序员的浪漫吧~

import schedule,time
def job():
    print("I'm working...")
schedule.every(10).minutes.do(job)   #每10分钟执行一次job()
schedule.every(2).hours.do(job)   #每2小时执行一次job()
schedule.every(2).seconds.do(job)   #每2秒执行一次job()
schedule.every().day.at("07:30").do(job)   #每天的7:30执行一次job()
schedule.every().monday.do(job)   #每个星期一执行一次job()
schedule.every().wednesday.at("13:15").do(job)   #每周三的13:15执行一次job()
#若job有参数
schedule.every(10).seconds.do(job,"参数")

#检查部署的情况,如果任务准备就绪,就开始执行任务
while True:
    schedule.run_pending()
    time.sleep(1)

由于这种程序需要长期运行,所以如果不想让自己的电脑长期不关机,可以将其部署在远端服务器上