美文网首页数据大数据 爬虫Python AI Sql
python-新浪爬虫之模拟登录

python-新浪爬虫之模拟登录

作者: 周一ing | 来源:发表于2017-10-13 16:07 被阅读0次

    好了,现在讲述针对Ajax异步请求内容的爬虫实例,以新浪微博为例。
    首先,新浪微博与前面讲述的两个网站不同的是,需登录才能获取内容,否则只能看到几条微博。

    正题,模拟登录的几种方式

    这里爬取的是新浪微博手机端网站,也就是m站,输入http://m/weibo.cn,
    你会看到如下界面,需要登录后才能看到界面

    Paste_Image.png

    1.利用用户id

    首先介绍一种最简单的方式跳过登录界限,针对是爬取特定用户的信息,仅需加上需爬取用户id即可

    如: http://m.weibo.cn/u/12337777 12337777为用户id,这里是数字是随意写的,可以加上自己的id,用户id 可自行登录后 ,在开发者工具网络中下图X-Log-Uid中后面的那串数字就是你的id


    同理,也可以看见你关注用户的id,进入你关注用户的界面,打开开发者工具,重新载入一次界面,可在XHR中看到返回为json的请求,打开响应,可看到各项参数。

    Paste_Image.png

    利用cookie

    当你登录一个网站后,便会产生对应的cookie,cookie是让浏览器知道你曾经登录过,所以当你访问该站点的其它页面便不用再进行登录操作,另外,并且当你再次访问该网站也无需进行登录。所以在进行爬虫操作时,将cookie加入你的请求的标题头即可。
    获取cookie有如下方法,第一种直接在开发者工具中找

    Paste_Image.png

    第二种方式可利用之前提到的selenium,模拟登录之后获取cookie

        driver.get("https://passport.weibo.cn/signin/login?") 
        time.sleep(5)
        elem_user = driver.find_element_by_id("loginName") 
        elem_user.send_keys(username) #用户名   
        elem_pwd = driver.find_element_by_id("loginPassword")  
        elem_pwd.send_keys(password)  #密码     
        time.sleep(5)            #sleep这个习惯其实不是很好,最好使用之前提过的显式等待
        elem_sub = driver.find_element_by_id("loginAction")  
        elem_sub.click()              #点击登陆  
        time.sleep(2)
        cookies = driver.get_cookies() #获取cookie
        cookie = [item["name"] + "=" + item["value"] for item in cookies]
        cookiestr = ';'.join(item for item in cookie) #处理cookie使其格式与标题头中要求一致
    

    于是,经过处理后的cookie就和上一图片中cookie后面的值一样啦。
    获取了cookie之后怎么使用呢?

        user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0'
        headers = { 'User-Agent' : user_agent , 'cookie': cookies}##把得到的cookie加在header里之后随请求一起发送,就可以得到登录后的页面
        index_url = 'http://weibo.cn/ofobike?page=1'
        request = urllib2.Request(url = index_url, headers = headers)

    相关文章

      网友评论

        本文标题:python-新浪爬虫之模拟登录

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