码迷,mamicode.com
首页 > 编程语言 > 详细

python学习第五天

时间:2019-06-18 00:34:55      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:odi   利用   登陆   分析   net   模块   cte   coding   expect   

requests的post请求

 

‘‘‘
post请求访问github
https://github.com/session

post
Referer:https://github.com/login
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
From data:
commit:Sign in
utf8:?
authenticity_token:AJdAVBwjyD7pSBlTAss/+dPNzXG4TRZCkai517a7d1tZI3HBbv57wCdWBMLmloSliZ9A7DwgGZsQ1D1B0pENIA==
login:1343805472
password:17855320635zmm
webauthn-support:unknown
‘‘‘

#访问login页获取token信息
‘‘‘
请求url:https://github.com/login
请求方式:GET
响应头:Set-Cookie
请求头:Cookie
User-Agent
‘‘‘

import requests
import re
headers={
    User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
}
response = requests.get(url=https://github.com/login, headers=headers)
#print(response.text)
login_cookies=response.cookies.get_dict()
print(login_cookies)


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

#二、往sessionurl发送post请求
#
headers2={
    Referer: https://github.com/login,
    User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
}

# login_cookies=response.cookies.get_dict()
form_data={
    "utf8":"?",
    "authenticity_token":authenticity_token,
    "login":"1343805472@qq.com",
    "password":"17855320635zmm",
    "webauthn-support":"unsupported",
    "commit":"Sign in",
}
response2=requests.post(url=https://github.com/session,data=form_data,headers=headers2,cookies=login_cookies)
print(response2.status_code)

with open(github.html,w,encoding=utf-8) as f:
    f.write(response2.text)

 

response响应

 

import requests

response=requests.get(http://baidu.com)
print(response.status_code)#获取响应状态码
print(response.url)#获取url地址
print(response.text)#获取文本
print(response.content)#获取二进制流
print(response.headers)#获取页面请求头信息
print(response.history)#上一次跳转的信息
#1、返回cookie字典 2、返回cookie对象
print(response.cookies)#获取cookie信息
print(response.cookies.get_dict())#获取cookie信息转换成字典
print(response.cookies.items())#获取cookie信息转换成字典
print(response.cookies.items())#获取cookie信息转换成字典
print(response.encoding)#
print(response.elapsed)#访问时间

 

requests高级用法

 

#证书验证(大部分网站都是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, verify=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)

 

利用selenium实现自动访问百度一拳超人和京东唐诗三百首

from selenium import webdriver  # 用来驱动浏览器的

#调用得到一个动作链对象,破解滑动验证码的时候用的 可以拖动图片
from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片

#按照什么方式查找属性,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素






from selenium import webdriver
import time

chrome = webdriver.Chrome(rF:\软件\chromedriver_win32\chromedriver.exe)
#若try出现异常
try:
    #通过谷歌浏览器驱动打开谷歌浏览器
    #chrome=webdriver.Chrome(r‘F:\软件\chromedriver_win32\chromedriver.exe‘)
    # 往lyj博客发送get请求
    #chrome.get(‘https://www.cnblogs.com/lyj68/‘)


    wait=WebDriverWait(chrome,10)

    #1、访问百度
    chrome.get(https://www.baidu.com/)

    #2、查找input输入框
    input_tag=wait.until(
        #调用EC的presence_of_element_located()
        EC.presence_of_element_located((By.ID,"kw")))


    #3、搜索一拳超人
    input_tag.send_keys(一拳超人)

    #4、按键盘回车键
    input_tag.send_keys(Keys.ENTER)
    time.sleep(10)
#无论发生什么都会关闭浏览器
finally:
#关闭浏览器
    chrome.close()

try:
    # 通过谷歌浏览器驱动打开谷歌浏览器
    # chrome=webdriver.Chrome(r‘F:\软件\chromedriver_win32\chromedriver.exe‘)
    # 往lyj博客发送get请求
    # chrome.get(‘https://www.cnblogs.com/lyj68/‘)

    wait = WebDriverWait(chrome, 10)

    # 1、访问京东主页
    chrome.get(https://www.jd.com/)

    # 2、查找input输入框
    input_tag = wait.until(
        # 调用EC的presence_of_element_located()
        EC.presence_of_element_located((By.ID, "key")))

    # 3、搜索唐诗三百首
    input_tag.send_keys(唐诗三百首)

    # 4、根据class属性标签查找名称
    search_button=wait.until(EC.presence_of_element_located((By.CLASS_NAME,button)))

    #5、点击搜索按钮
    search_button.click()
    time.sleep(10)
# 无论发生什么都会关闭浏览器
finally:
    # 关闭浏览器
    chrome.close()

selenium基本选择器的应用:

from selenium import webdriver  # 用来驱动浏览器的
import time

‘‘‘
隐式等待
‘‘‘
# 获取驱动对象、
driver = webdriver.Chrome()

try:
    # 显式等待: 等待某个元素加载
    # 参数1: 驱动对象  参数2: 等待时间
    # 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()


from selenium import webdriver  # 用来驱动浏览器的
import time

‘‘‘
===============所有方法===================
    element是查找一个标签
    elements是查找所有标签

    1、find_element_by_link_text  通过链接文本去找
    2、find_element_by_id 通过id去找
    3、find_element_by_class_name
    4、find_element_by_partial_link_text
    5、find_element_by_name
    6、find_element_by_css_selector
    7、find_element_by_tag_name
‘‘‘
# 获取驱动对象、
driver = webdriver.Chrome()

try:

    # 往百度发送请求
    driver.get(https://www.baidu.com/)
    driver.implicitly_wait(10)

    # 1、find_element_by_link_text  通过链接文本去找
    # 根据登录
    # send_tag = driver.find_element_by_link_text(‘登录‘)
    # send_tag.click()

    # 2、find_element_by_partial_link_text 通过局部文本查找a标签
    login_button = driver.find_element_by_partial_link_text()
    login_button.click()
    time.sleep(1)

    # 3、find_element_by_class_name 根据class属性名查找
    login_tag = driver.find_element_by_class_name(tang-pass-footerBarULogin)
    login_tag.click()
    time.sleep(1)

    # 4、find_element_by_name 根据name属性查找
    username = driver.find_element_by_name(userName)
    username.send_keys(15622792660)
    time.sleep(1)

    # 5、find_element_by_id 通过id属性名查找
    password = driver.find_element_by_id(TANGRAM__PSP_10__password)
    password.send_keys(*******)
    time.sleep(1)

    # 6、find_element_by_css_selector  根据属性选择器查找
    # 根据id查找登录按钮
    login_submit = driver.find_element_by_css_selector(#TANGRAM__PSP_10__submit)
    # driver.find_element_by_css_selector(‘.pass-button-submit‘)
    login_submit.click()

    # 7、find_element_by_tag_name  根据标签名称查找标签
    div = driver.find_element_by_tag_name(div)
    print(div.tag_name)

    time.sleep(10)

finally:
    driver.close()

爬取快代理代码为:

‘‘‘ 爬取快代理: 
    1.访问快代理页面 
    2.通过re模块解析并提取所有代理 
    3.通过ip测试网站对爬取的代理进行测试
    4.若test_ip函数抛出异常代表代理作废,否则代理有效 
    5.利用有效的代理进行代理测试 
    <tr>
                <td data-title="IP">124.205.143.212 

</td>
                <td data-title="PORT">40585</td>
                <td data-title="匿名度">高匿名</td>
                <td data-title="类型">HTTP</td>
                <td data-title="位置">北京市北京市 鹏博士宽带</td>
                <td data-title="响应速度">2秒</td>
                <td data-title="最后验证时间">2019-06-17 16:30:54</td>
                </tr>
    re:
        <tr>.*?<td data-title="IP">(.*?)</td>.*?<td data-title="PORT">(.*?)</td>
‘‘‘
‘‘‘ 
页面链接 
第一页: 
    https://www.kuaidaili.com/free/ 

 
第二页: 
    https://www.kuaidaili.com/free/inha/2/ 

 
‘‘‘
import requests
import re
import time
headers = {
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36,
}
def get_index(url):
    time.sleep(1)
    response1 = requests.get(url, headers=headers)
    return response1
def parse_index(text):
    ip_list1 = re.findall(<tr>.*?<td data-title="IP">(.*?)</td>.*?<td data-title="PORT">(.*?)</td>, text, re.S)
    for ip_port in ip_list1:
        ip1 = :.join(ip_port)
        yield ip1
def test_ip(ip2):
    print(测试ip: %s % ip2)
    try:
        proxies = {https: ip2}
        # ip测试网站
        ip_url1 = https://www.ipip.net/ 

        # 使用有效与无效的代理对ip测试站点进行访问,若返回的结果为200则代表当前测试ip正常
        response2 = requests.get(ip_url1, headers=headers, proxies=proxies, timeout=1)
        if response2.status_code == 200:
            return ip
        # 若ip代理无效则抛出异常
    except Exception as e:
            print(e)
        # 使用代理爬取nba
    def spider_nba(good_ip1):
        url = https://china.nba.com/ 

        proxies = {https: good_ip1}
        response3 = requests.get(url, headers=headers, proxies=proxies)

        print(response3.status_code)
        print(response3.text)

    if __name__ == __main__:
        base_url = https://www.kuaidaili.com/free/inha/{}/ 

        for line in range(1, 2905):
            ip_url = base_url.format(line)
            response = get_index(ip_url)
            ip_list = parse_index(response.text)
            for ip in ip_list:
                good_ip = test_ip(ip)
                if good_ip:
                    spider_nba(good_ip)

自动登录抽屉新热榜代码为:

from selenium import webdriver
import time
#获取驱动对象
driver = webdriver.Chrome()
try:
 #自动登陆抽屉新热榜
 #发送get请求
    driver.get(https://dig.chouti.com/ )
 #隐式等待
    driver.implicitly_wait(10)
     #获取 ‘登陆‘ 按钮
    send_tag = driver.find_element_by_id(login_btn)
    send_tag.click()
     #获取手机号输入框
    username = driver.find_element_by_class_name(login-phone)
    username.send_keys(*******)
    time.sleep(1)
     #获取密码输入框
    password = driver.find_element_by_class_name(pwd-password-input)
    password.send_keys(*******)
    time.sleep(1)
     #获取 ‘登陆‘ 按钮
    login = driver.find_elements_by_link_text(登录)
    login[1].click()
    time.sleep(10)
finally:
    driver.close()

通过今天的学习,学习了自动登录网页和利用网页自动搜索的过程,觉得特别神奇有用,在这个学习过程中更加发现tank老师的博学多才,激励我也要努力学习技术,变得像老师一样能够独立解决和分析问题。

 

python学习第五天

标签:odi   利用   登陆   分析   net   模块   cte   coding   expect   

原文地址:https://www.cnblogs.com/zmmm/p/11042912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!