zoukankan      html  css  js  c++  java
  • crawler碎碎念5 豆瓣爬取操作之登录练习

    import requests
    
    import html5lib
    
    import re
    
    from bs4 import BeautifulSoup
    
    s = requests.Session()      #这里要提一点,就是session的话就是对会话的一种维持,因为request缺乏持续性,仅限于2个相邻的页面
    
    url_login = 'http://accounts.douban.com/login'
    
    url_contacts = 'https://www.douban.com/people/****/contacts'
    
     
    
    formdata = {
    
    'redir':'https://www.douban.com',      #重定向
    
    'form_email':'t.t.panda@hotmail.com',
    
    'form_password':'xxxxxxxxxxxxxx''login':u'登陆'            
    
     }
    
    ‘‘‘
    
    关于字符串前面的功能的补充
    
    1.r/R 
    表示非转义的原始字符串,比如在字符串中如果出现
    是换行,但是如果在字符串的前面添加r则表示和n两个字符,一般常见于正则表达式中。
    
    2.b 
    Python3里默认的str是(Python2里的)unicode, bytes是(Python2)的str, b前缀代表的就是bytes。 Python2里, b前缀没什么具体意义, 只是为了兼容Python3的这种写法。
    
    3.u/U 
    表示unicode字符串 ,不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u;但是中文, 必须表明所需编码, 否则一旦编码转换就会出现乱码。 建议所有编码方式采用UTF-8。
    
     ’‘’
    
    headers = ' 这里自己打开开发者工具查看浏览器,复制粘贴就行了'
    
     r = requestys.post(url_login,data = formdata,headers= headers)
    
    content = r.text
    
    soup = BeautifulSoup(content,'html5lib')
    
    captcha = soup.findall('img',id = 'captcha_image')        #查看是否有验证码
    
    if captcha:
    
      captcha_url  = captcha['src']
    
      re_captcha_id = r'<input type-"hidden"name="captcha-id" value = "(.*?)"/'
    
      captcha_id = re.findall(re_captcha_id,content)
    
      print(captcha_id)
    
      print(captcha_url)
    
      print(captcha_url)
    
      capycha_text = input('please input the captcha:')
    
      formdata['captacha-solution'] =captcha_text
    
      formdata['captacha-id'] =captcha_id
    
       r = requests.post(url_login,data = formdata,headers = headers)
    
    print(r.text)
    
    r = s.get(url_conteacts)
    
    with open('contacts.txt','w+',encoding = 'utf-8'') as f:
    
        f.write(r.text)
    
      
    
    
    
    

     

    
    

    但是我们也发现每一次登陆都要输入密码和账户,还要验证,这也实在是太麻烦了,所以可以通过cookies,这就是我们常说的那些记住当前网址的密码

    import requests
    
    headers
    = {........} cookies = {...........} url = 'xxxxxxxxxxxx' r= requests.get(url,cookies=cookies,headers = headers) print(r.text) with open('sssss.txt','wb+') as f :   f.write(r.content)

    这其实就是最基本的一个爬虫套路模板了

    关于上面的那个爬虫,爬出来的其实是验证码的图片,还需要手动打开然后识别图片里面的数字再手动输入,这个其实也是很麻烦的

    这里先给出思路以后验证(如果还记得的呼哈)

    1,利用selenium打开图片所在网页,保存这张图片,把图片读取到百度识图的api中,得到的答案自动反馈给程序

    2,有一种设想,既然最后他要验证你输入的验证码对不对,那是不是图片的网页信息里面就夹杂着要比对的信息,那我是不是可以直接爬取这个然后反馈给程序?

    3,要么索性偷个懒,链接挂到网上的验证码识别平台(滑稽)

  • 相关阅读:
    $(document).ready() 与$(window).load()
    关于.NET玩爬虫这些事 【初码干货】
    关于c# .net爬虫
    UIScollView Touch事件
    UISearchBar 点击X 按钮收键盘
    IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法
    IOS 使用dispatch_once 创建单例
    IOS 定位 单例
    IOS拷贝文件到沙盒
    IOS后台运行
  • 原文地址:https://www.cnblogs.com/xingnie/p/9703386.html
Copyright © 2011-2022 走看看