• 爬虫


    #直接请求

    urllib
    response = urllib.request.urlopen('http://python.org/')
    html = response.read()
    #requset请求
    req = urllib.request.Request('http://python.org/')
    response = urllib.request.urlopen(req)
    the_page = response.read()

    UA生成
    pip3 install fake-useragent
    from fake_useragent import UserAgent
    ua = UserAgent()
    #ie浏览器的user agent
    print(ua.ie)
    #opera浏览器
    print(ua.opera)
    #chrome浏览器
    print(ua.chrome)
    #firefox浏览器
    print(ua.firefox)
    #safri浏览器
    print(ua.safari)
    #随机UA
    print(ua.random)

    #附加数据
    url = 'http://localhost/login.php'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    values = {
    'act' : 'login',
    'login[email]' : 'yzhang@i9i8.com',
    'login[password]' : '123456'
    }
    data = urllib.parse.urlencode(values)
    req = urllib.request.Request(url, data)
    req.add_header('Referer', 'http://www.python.org/')
    response = urllib.request.urlopen(req)
    the_page = response.read()

    #头部伪造
    url = 'http://localhost/login.php'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    values = {
    'act' : 'login',
    'login[email]' : 'yzhang@i9i8.com',
    'login[password]' : '123456'
    }
    headers = { 'User-Agent' : user_agent }
    data = urllib.parse.urlencode(values)
    req = urllib.request.Request(url, data, headers)
    response = urllib.request.urlopen(req)
    the_page = response.read()

    #错误处理
    try:
    urllib.request.urlopen(req)
    except urllib.error.HTTPError as e:
    print(e.code)
    print(e.read().decode("utf8"))


    #异常处理方式1
    try:
    response = urlopen(req)
    except HTTPError as e:
    print('The server couldn't fulfill the request.')
    print('Error code: ', e.code)
    except URLError as e:
    print('We failed to reach a server.')
    print('Reason: ', e.reason)
    else:
    print("good!")
    print(response.read().decode("utf8"))

    #异常处理方式2
    try:
    response = urlopen(req)
    except URLError as e:
    if hasattr(e, 'reason'):
    print('We failed to reach a server.')
    print('Reason: ', e.reason)
    elif hasattr(e, 'code'):
    print('The server couldn't fulfill the request.')
    print('Error code: ', e.code)
    else:
    print("good!")
    print(response.read().decode("utf8"))

    #HTTP 认证
    import urllib.request
    # 创建密码管理器
    password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
    # 添加用户及密码
    # 如果在这个域中则使用其
    top_level_url = "https://www.111cn.net /"
    password_mgr.add_password(None, top_level_url, 'rekfan', 'xxxxxx')
    handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
    # 创建opener
    opener = urllib.request.build_opener(handler)
    # 使用opener请求
    a_url = "https://www.111cn.net /"
    x = opener.open(a_url)
    print(x.read())
    # opnner安装加载.
    # 使用openner请求.
    urllib.request.install_opener(opener)
    a = urllib.request.urlopen(a_url).read().decode('utf8')
    print(a)

    #使用代理
    proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
    opener = urllib.request.build_opener(proxy_support)
    urllib.request.install_opener(opener)
    a = urllib.request.urlopen("http://www.111cn.net ").read().decode("utf8")
    print(a)

    #超时设置
    import socket
    import urllib.request
    # 超时秒数
    timeout = 2
    socket.setdefaulttimeout(timeout)
    # 以上设置了超时
    try:
    req = urllib.request.Request('http://www.111cn.net /')
    except socket.timeout:
    pass
    a = urllib.request.urlopen(req).read()
    print(a)

    #文件下载
    urlretrieve(url, filename=None, reporthook=None, data=None)
    参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
    参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
    参数 data 指 post 到服务器的数据。
    该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。
    def cbk(a, b, c):
    '''回调函数
    @a: 已经下载的数据块
    @b: 数据块的大小
    @c: 远程文件的大小
    '''
    per = 100.0 * a * b / c
    if per > 100:
    per = 100
    print('%.2f%%' % per)
    url = 'http://www.google.com'
    local = 'd://google.html'
    urllib.urlretrieve(url, local, cbk)

    requests使用
    import requests
    r = requests.get('https://github.com/timeline.json')
    r = requests.post("http://httpbin.org/post")
    r = requests.put("http://httpbin.org/put")
    r = requests.delete("http://httpbin.org/delete")
    r = requests.head("http://httpbin.org/get")
    r = requests.options("http://httpbin.org/get")

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

    payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
    r = requests.get('http://httpbin.org/get', params=payload)
    r.text
    r.encoding
    r.encoding = 'ISO-8859-1'
    r.content
    r.json()
    r.raw
    r.status_code
    r.status_code == requests.codes.ok
    r.raise_for_status()
    r.headers
    r.cookies

    headers = {'user-agent': 'my-app/0.0.1'}
    r = requests.get(url, headers=headers)

    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post("http://httpbin.org/post", data=payload)

    payload = (('key1', 'value1'), ('key1', 'value2'))
    r = requests.post('http://httpbin.org/post', data=payload)

    cookies = dict(cookies_are='working')
    r = requests.get(url, cookies=cookies)
    r.text

    jar = requests.cookies.RequestsCookieJar()
    jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
    jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
    url = 'http://httpbin.org/cookies'
    r = requests.get(url, cookies=jar)

    默认情况下,除了 HEAD, Requests 会自动处理所有重定向。
    可以使用响应对象的 history 方法来追踪重定向。
    如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通过 allow_redirects 参数禁用重定向处理:
    r = requests.get('http://github.com', allow_redirects=False)
    如果你使用了 HEAD,你也可以启用重定向:
    r = requests.head('http://github.com', allow_redirects=True)

    requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数

    错误与异常
    遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
    如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。
    若请求超时,则抛出一个 Timeout 异常。
    若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
    所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

    会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。

    s = requests.Session()
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
    r = s.get("http://httpbin.org/cookies")

    可以通过传递一个 {hook_name: callback_function} 字典给 hooks请求参数为每个请求分配一个钩子函数
    如果需要使用代理,可以通过为任意请求方法提供 proxies 参数来配置单个请求值为字典型,结构为 协议:地址,协议:地址


    SELENIUM
    0、下载 Selenium for pythonhttps://pypi.python.org/pypi/selenium#downloads
    python -m pip install selenium
    1、基础篇,主要是能个熟悉如何打开和关闭浏览器,主要是三大浏览器IE/火狐/谷歌
    1.1、要用selenium打开fiefox浏览器。首先需要去下载一个driver插件geckodriver.exe, 下载地址https://github.com/mozilla/geckodriver/releases,下载好这个exe文件后,把这个文件放到你的python安装目录下
    from selenium import webdriver # 导入webdriver包
    driver = webdriver.Firefox() # 初始化一个火狐浏览器实例:driver
    driver = webdriver.Chrome()
    driver.maximize_window() # 最大化浏览器
    driver.implicitly_wait(8) # 设置隐式时间等待
    driver.get("https://www.baidu.com") # 通过get()方法,打开一个url站点
    driver.quit() #关闭并退出浏览器

    driver.get("https://www.baidu.com") # 地址栏输入百度地址
    driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium") # 搜索输入框输入Selenium
    driver.find_element_by_xpath("//*[@id='su']").click() #点击百度一下按钮
    # 导入time模块,等待2秒
    time.sleep(2)
    #这里通过元素XPath表达式来确定该元素显示在结果列表,从而判断Selenium官网这个链接显示在结果列表。
    # 这里采用了相对元素定位方法/../
    # 通过selenium方法is_displayed() 来判断我们的目标元素是否在页面显示。
    driver.find_element_by_xpath("//div/h3/a[text()='官网']/../a/em[text()='Selenium']").is_displayed()

    # 得到页面源代码
    doc = driver.page_source
    emails = re.findall(r'[w]+@[w.-]+',doc) # 利用正则,找出 xxx@xxx.xxx 的字段,保存到emails列表

    #利用id定位
    driver.find_element_by_id("kw")
    #利用tag_name定位
    driver.find_element_by_tag_name("form")
    #利用链接文字定位
    driver.find_element_by_link_text("新闻")
    #利用部分链接文字定位
    driver.find_element_by_partial_link_text("主页").click()
    #利用classname定位
    driver.find_element_by_class_name("s_ipt")
    #利用name定位
    driver.find_element_by_name("wd")
    #利用css选择器定位
    driver.find_element_by_css_selector("#su")

    send_keys()来输入字符串到文本输入框这样的页面元素
    click()来点击页面上支持点击的元素
    clear()清除一个文本输入框内的文字

    driver.refresh() # 刷新方法 refresh
    driver.back() # 后退
    driver.forward() # 前进
    driver.capabilities['version'] # 返回浏览器version的值
    driver.current_url #获取当前页面的url
    driver.title # title方法可以获取当前页面的标题显示的字段
    ele = driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') # 触发ctrl + t
    find_elements,也就是找一组元素,返回的是一个列表
    driver.set_window_size(1280,800) # 分辨率 1280*800
    driver.get_window_size() #获取窗口大小
    element.text属性得到字符串
    element.size属性获取元素的大小(宽高)
    link.get_attribute('href')获取属性值
    driver.get_screenshot_as_file("C:\Users\你的账户名\Desktop\baidu.png") #截图保存
    is_selected()返回是是布尔值,用来判断单选或者多选控件是否被选中
    driver.execute_script("window.alert('这是一个alert弹框。');") # 注意这里的分号是英文输入法的分号,不能用中文
    driver.execute_script("return arguments[0].scrollIntoView();",target_elem) # 用目标元素参考去拖动
    #driver.execute_script("scroll(0,2400)") # 这个是第二种方法,比较粗劣,大概的拖动

  • 相关阅读:
    Math 方法的使用
    敏捷开发 故事墙
    利用OpenPOP开源组件实现接收电子邮件功能
    JDBC连接MySql数据库
    【转】"已成功与服务器建立连接,但是在登录前的握手期间发生错误"问题解决方案
    【转】如何让虚拟目录里面的webconfig不继承网站
    【转】JavaScript控制图片放大缩小
    【Wonder原创】CheckBoxList实现单选
    【杂记】ASP.Net Web开发
    【Wonder整理】防止重复提交并弹出半透明对话框
  • 原文地址:https://www.cnblogs.com/nanyu/p/9028387.html
Copyright © 2020-2023  润新知