2019-06-17 python day-05

今日内容

    1.requests 之 post

    2.response相关操作

    3.requests模块高级用法

    4.selenium模块基本用法

1.requests 之 post

'''

    requests 之 post

    post 请求之 GitHub 登录

    请求url:

        https://github.com/session

    请求方式:

        post

    请求头:

        #上一次请求从哪里来

        Referer: https://github.com/login?return_to=%2Fjasonim%2Febook%2Ftree%2Fmaster%2Fcoding

        User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

    请求体:

        commit: Sign in

        utf8: ✓

        authenticity_token: AJMT5QZPTZEDs8ETRUlgNVZQ44BjM3Pmnle6acTkUJxGC8RIs+ugkdGfy9vRwQt1SNKLJHRFKMI0s1h2foc4Cg==

        login: nadai

        password: 1234567

        webauthn-support: supported

'''

# 一 访问login页面获取token信息

'''

    请求url:

        https://github.com/login?return_to=%2Fjasonim%2Febook%2Ftree%2Fmaster%2Fcoding

    请求方式:

    Get

    响应头:

    set-cokie//保存用于下次登录确认

    请求头:

        cookie

        user-agent

正则:

<input type="hidden" name="authenticity_token" value="r7pd4vjDN9wBqdU9CyTAodWp8KM9Tn7FJKQezrCh9binU1JFH0G/qw0MVXMpeIiEoGqWGA867IrJvwteJljVxg==" />

正则写法:

<input type="hidden" name="authenticity_token" value="(.*?)" />

'''

# 二 往session发送post请求

import requests

import re

headers = {

    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'

response = requests.get(url='https://github.com/login?return_to=%2Fjasonim%2Febook%2Ftree%2Fmaster%2Fcoding',headers=headers)

# print(response.text)

authenticity_token = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',response.text,re.S)

# print(authenticity_token)

# 把login页面返回的cookie转换成字典

login_cookies = response.cookies.get_dict()

headers2 = {

    'Referer':'https://github.com/login?return_to=%2Fjasonim%2Febook%2Ftree%2Fmaster%2Fcoding',

    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'

}

# 拼接请求体信息

form_data = {

    'commit': 'Sign in',

    'utf8': '✓',

    'authenticity_token':authenticity_token,

    'login':'Alicedorothy',

    'password':'Githubmacpro2018',

    'webauthn-support': 'supported'

}

# 往session地址发送post请求

# 携带请求头(referer,user-agent,cookie)

response2 = requests.post(url='https://github.com/session',data=form_data,headers=headers2,cookies=login_cookies)

print(response2.status_code)

2.response相关操作

import requests

response = requests.get('https://baidu.com')

print(response.status_code)

print(response.url)

print(response.encoding)

response.encoding = 'utf-8'

print(response.content)

print(response.headers)

print(response.history)

print(response.cookies)

print(response.cookies.get_dict())

print(response.cookies.items())

print(response.encoding)

print(response.elapsed)

import requests

url = 'https://vd3.bdstatic.com/mda-ic4pfhh3ex32svqi/hd/mda-ic4pfhh3ex32svqi.mp4?auth_key=1557973824-0-0-bfb2e69bb5198ff65e18065d91b2b8c8&bcevod_channel=searchbox_feed&pd=wisenatural&abtest=all.mp4'

response = requests.get(url, stream=True)# stream = True,把content设置成迭代器对象

print(response.content)

with open('love_for_GD.mp4', 'wb') as f:

    for content in response.iter_content():

        f.write(content)

3.requests模块高级用法

'''

SSL Cert Verification

超时 设置

使用代理(***)

认证设置

异常处理

上传文件

'''

#证书验证(大部分网站都是https)

import requests

# 如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终端

response = requests.get('https://www.xiaohuar.com')

print(response.status_code)

# 改进1:去掉报错,但是会报警告

import requests

response = requests.get('https://www.xiaohuar.com', verif

y=False)

# 不验证证书,报警告,返回200

print(response.status_code)

# 改进2:去掉报错,并且去掉警报信息

import requests

import urllib3

urllib3.disable_warnings()  # 关闭警告

response = requests.get('https://www.xiaohuar.com', verify=False)

print(response.status_code)

# 改进3:加上证书

# 很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书

# 知乎\百度等都是可带可不带

# 有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站

import requests

import urllib3

# urllib3.disable_warnings()  # 关闭警告

response = requests.get(

    'https://www.xiaohuar.com',

    # verify=False,

    cert=('/path/server.crt', '/path/key'))#非真实目录

print(response.status_code)

# 超时设置

# 两种超时:float or tuple

# timeout=0.1  # 代表接收数据的超时时间

# timeout=(0.1,0.2)  # 0.1代表链接超时  0.2代表接收数据的超时时间

import requests

response = requests.get('https://www.baidu.com',

                        timeout=0.0001)

    4.selenium模块基本用法

'''

1.什么是selenium?

    自动化测试工具,可以使用它帮助我们驱动浏览器自动去执行某些定义好的操作,例如页面中执行的js代码,跳过登录验证

2.为什么使用?

    优点:

    使用requests模块登录需要分析大量的复杂通信流程,使用selenium可以轻松跳过登录验证

    缺点:

    浏览器会加载css,js、图片、视频....数据,爬虫效率相比requests模块要低

3.如何使用

    #pip3 install -i https://pypi.tsinghua.edu.cn/simple selenium

'''

from selenium import webdriver

import time

chrome = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

chrome.get('https://www.baidu.com')

time.sleep(3)

chrome.close()

wait = WebDriverWait(chrome,10)

# 访问JD

chrome.get('https://jd.com')

input_tag = wait.until(EC.presence_of_element_located((By.ID,'key')))

input_tag.send_keys('唐诗三百首')

隐式等待

from selenium import webdriver

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

# driver = webdriver.Chrome()

try:

    # wait = WebDriverWait(chrome,10) # 显示等待:等待某个元素加载

    driver.get('https://china.nba.com/')

    # 隐式等待:等待所有元素加载

    driver.implicitly_wait(10)

    news_tag = driver.find_element_by_class_name('nav-news')

    print(news_tag)

    print(news_tag.tag_name)

    time.sleep(10)

finally:

    driver.close()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容