美文网首页
day4、PhantomJS-页面滚动-requests框架-登

day4、PhantomJS-页面滚动-requests框架-登

作者: 是东东 | 来源:发表于2018-08-19 12:20 被阅读0次

    phantomjs是一种无界面浏览器,以下是使用

    # phantomjs是一种浏览器,没有用户界面
    from selenium import webdriver
    from time import sleep
    
    # 创建有一个Phantomjs的驱动对象
    driver = webdriver.PhantomJS()
    
    url = "https://www.baidu.com/"
    
    # 用driver发起一个get请求
    driver.get(url)
    
    sleep(5)
    
    #selenium的page_source方法可以直接返回页面源码
    html = driver.page_source
    print(html)
    
    
    driver.quit() # 使用结束后退出浏览器
    

    webdriver.Chrome 使用各类有界面浏览器

    from selenium import webdriver
    from time import sleep
    from bs4 import BeautifulSoup
    
    # 创建浏览器驱动对象
    driver = webdriver.Chrome()
    
    url = "https://category.vip.com/suggest.php?keyword=%E5%8F%A3%E7%BA%A2"
    
    driver.get(url)
    sleep(5)
    html = driver.page_source
    driver.quit()
    # 解析
    soup = BeautifulSoup(html,"lxml")
    img_list = soup.select(".J_img")
    print(img_list)
    
    #写入当前路径本地文件
    # with open("vip.html","w",encoding="utf-8") as fp:
    #     fp.write(html)
    

    页面进度条滚动,比如今日头条主页

    from selenium import webdriver
    from time import sleep
    
    
    url = "https://www.toutiao.com/"
    driver = webdriver.Chrome()
    driver.get(url) #打开url
    sleep(5)
    
    #让页面滚动
    #上拉效果通过js代码实现上拉
    js = "document.body.scrollTop=1000"
    driver.execute_script(js) #执行js代码
    

    request框架 get和post请求

    #requests框架基于urllib的第三方的请求框架,它对urllib进行封装,与功能的扩展,几乎涵盖了所有的web请求
    import requests
    #用requests发起一个get请求
    r = requests.get("http://www.baidu.com/")
    #打印出来的是响应体
    print(r)    #<Response [200]>
    #text代表响应体的字符串格式
    # print(r.text)
    #content是响应体的二进制格式
    # print(r.content)
    #加请求头
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
    url = "https://www.baidu.com/s"
    data = {
        'wd': '日本校花'
    }
    #get请求
    res= requests.get(url=url,headers=headers, params=data)
    #post请求
    #res= requests.get(url=url,headers=headers, params=data)
    # request.get返回的是一个响应对象,包含了响应头和响应体
    print(res.url)
    print(res.status_code)
    print(res.headers)
    print(res.text)
    #【注意】request只是对urllib封装,不能解析js
    

    登陆(但requests无法直接保存会话信息)

    import requests
    
    url = "http://www.jokeji.cn/user/c.asp"
    # 请求头
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    # 请求体
    params = {
        'u': 'bobo666',
        'p': 'a12345678',
        'sn': '1',
        't': 'big'
    }
    
    # 登录
    r = requests.get(url=url,headers=headers,params=params)
    print(r.text)
    
    # 登录成功了接下来访问主页
    usr_url = "http://www.jokeji.cn/User/MemberJoke.asp"
    res = requests.get(usr_url)
    with open("bobo.html",'wb') as fp:
        fp.write(res.content)
    # 【说明】由于登录以后没有保存(requests无法直接保存会话信息),访问的主页就不是用户页面
    

    带session的登陆

    import requests
    
    url = "http://www.jokeji.cn/user/c.asp"
    # 请求头
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    # 请求体
    params = {
        'u': 'bobo666',
        'p': 'a12345678',
        'sn': '1',
        't': 'big'
    }
    # 如果登录需要保存登录以后用户的会话信息
    s = requests.Session() # 创建一个Session对象,这个对象在请求的时候可以携带会话信息
    # 用Session对象来发起请求
    r = s.get(url=url,headers=headers,params=params)
    print(r.text)
    # s在发起请求以后携带上相关的Session信息
    
    # 登录成功以后访问用户主页
    usr_url = "http://www.jokeji.cn/User/MemberJoke.asp"
    if r.text == 'true':
        print("登录成功!")
        res = s.get(usr_url,headers=headers)
        with open("joke.html",'wb') as fp:
            fp.write(res.content)
    

    登陆古诗文网,有验证码,现阶段使用人工验证

    import requests
    from bs4 import BeautifulSoup
    
    s = requests.Session()
    #1、向登陆页面发起get请求,获取token和验证码
    login_page = "https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx"
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
    #发起get请求
    logins_page = s.get(url=login_page, headers=headers)
    soup = BeautifulSoup(logins_page.text, 'lxml')
    #获取两个token值
    token_1 = soup.select("#__VIEWSTATE")[0].attrs.get("value")
    token_2 = soup.select("#__VIEWSTATEGENERATOR")[0].attrs.get("value")
    #获取验证码图片的url
    c = "https://so.gushiwen.org" + soup.select("#imgCode")[0].get("src")
    print(c)
    #下载图片
    code_img = s.get(c)
    print(code_img.content)
    #保存到本地
    with open("./code_img.png", "wb") as fp:
        fp.write(code_img.content)
    #技术有限,只能人工识别,然后输入验证码
    code_num = input("请输入验证码:")
    #请求的请求体数据已经完全获取到
    # 接下来创建请求体
    data = {
        '__VIEWSTATE': token_1,
        '__VIEWSTATEGENERATOR': token_2,
        'from': 'http://so.gushiwen.org/user/collect.aspx',
        'email': '694021389@qq.com',
        'pwd': '393305',
        'code': code_num,
        'denglu': '登录',
    }
    # 2、登录
    login_url = "https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx"
    
    res = s.post(url=login_url,headers=headers, data=data)
    
    # 3、抓取主页中的内容:所有的古诗、名句、古籍,作者全部抓取下来,写入json数据
    with open("gushiwen_login.html", "w", encoding="utf-8") as fp:
        fp.write(res.text)
    

    登陆chinaunix素材网,有隐藏token

    import requests
    from bs4 import BeautifulSoup
    
        #要求登陆   http://bbs.chinaunix.net/
    
    
        #创建一个session对象,用于保存会话信息
    s = requests.Session()
        #请求头
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
        #反爬:通过隐藏域设置token
        #动态生成的一些get参数
        #1、对登陆页面发起get请求获取相关的动态参数和token
    login_page = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes"
    login_source = s.get(url=login_page, headers=headers)
        #创建soup对象 bs4把动态参数和token获取过来
    soup = BeautifulSoup(login_source.text, "lxml")
        #获取动态参数
    login_params = soup.select("form.cl")[0].attrs.get("action")
        #获取token
    formhash = soup.select("[name=formhash]")[0].attrs.get("value")
        #获取token
    referer = soup.select("[name=referer]")[0].attrs.get("value")
        #构造请求体
    data = {
        'formhash': formhash,
        'referer': referer,
        'username': "MrFan666",
        'password': "f12345678",
        'loginsubmit': 'true',
        'return_type': ''
    }
        #登陆url, 拼接上动态的参数
    login_url = "http://bbs.chinaunix.net/" + login_params
        #发起post请求
    res = s.post(url=login_url, headers=headers, data=data)
    #写入本地
    with open("chinaunix_login.html", "w") as fp:
        fp.write(res.text)
    

    相关文章

      网友评论

          本文标题:day4、PhantomJS-页面滚动-requests框架-登

          本文链接:https://www.haomeiwen.com/subject/yzhciftx.html