持续创作,加速成长!这是我参与「掘金日新计划 · 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
-
user-agent(用户代理):记录电脑信息和浏览器版本
-
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
- 写入
- 首先需要创建一个Workbook对象
wb,即一个空的Excel文件 - 通过
wb.active获取工作表,这个工作表中可以设置title名字 - 如果需要往工作表中插入数据,有两种方式:
- 通过
sheet[单元格名称]来设置 - 通过
sheet.append(一个数组)——插入一行 因此如果需要添加多行数据,可以通过for循环实现
- 通过
- 写完数据后需要保存,传入的参数是文件名
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') #保存文件,括号内为保存文件名
- 读取
- 首先需要打开文件并读取到变量
wb中 - 其次也是获取到工作表,可以通过wb[‘表名’]的方式
- 注意如果需要读取某个单元格的数据,不能仅通过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
- 写入
- 同样首先打开文件,在
open()方法里可以川力文件名,打开方式,编码等参数 - 注意这里的
newline=''是为了避免出现两倍行距,encoding='utf-8'是为了定义编码方式,防止出现乱码 - 紧接着创建一个writer对象,用于对文件进行写操作
- 对文件的写操作执行完毕后一定要记得关闭文件
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() #关闭文件
- 读取
- 首先也需要打开文件,传递的打开方式参数应该是
r - 创建一个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)
由于这种程序需要长期运行,所以如果不想让自己的电脑长期不关机,可以将其部署在远端服务器上