Maison  >  Questions et réponses  >  le corps du texte

python - Utilisez des requêtes pour explorer les informations de travail [Dajie.com], mais cela échoue plusieurs fois. Pouvez-vous m'aider à découvrir ce qui ne va pas avec mon code? Comment faut-il le changer ?

J'ai déjà exploré plusieurs données statiques de sites Web et cela s'est déroulé relativement facilement. Cette fois, j'ai rencontré ajax et lu quelques documents. J'ai senti que ce n'était pas difficile, alors j'ai commencé directement, mais je suis toujours resté bloqué. . .

Objectif :
Explorez les informations sur les emplois sur Dajie.com.

Processus : 
1. Utilisez la fonction d'élément d'inspection du navigateur pour afficher les informations d'adresse des données chargées dynamiquement.

2. Configurez les paramètres de requête des requêtes en fonction des informations affichées.

data = {
    'keyword': 'python',
    'order': '0',
    'city': '',
    'recruitType': '',
    'salary': '',
    'experience': '',
    'page': '5',
    'positionFunction': '',
    '_CSRFToken': '',
    'ajax': '1'
}
headers = {
    'accept': 'application/json, text/javascript, */*; q=0.01',
    'accept-language': 'zh-CN,zh;q=0.8',
    'accept-encoding': 'gzip, deflate, sdch',
    'cookie': 'DJ_UVID=MTQ5MDMyMTExNTAzODM2MTc5; DJ_RF=empty; DJ_EU=http%3A%2F%2Fjob.dajie.com%2F; __login_tips=1; dj_cap=9c8c95bdef72e84a9bd7493a5ab91694; USER_ACTION="request^A-^A-^Ajobdetail:^A-"; SO_COOKIE_V2=0c7cGprjIH0q9RHc53CWLLXf151DQ5QvUP5ccPQj4g0B/izuXHm8sp41lJjJJh3nmjAkroj8JczFN/SCLPAUzbOHW7wYWmQ6Zu7s',
    'referer': 'https://so.dajie.com/job/search?keyword=%E9%A3%9E%E5%88%A9%E6%B5%A6&from=job&clicktype=blank',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
    'method':'get'
}

3. Ajoutez les informations d'en-tête de requête à request.get().

response = requests.get('https://so.dajie.com/job/ajax/search/filter', params=data, headers=headers)

4. Consultez les informations de la page renvoyée.

print response.url
print ''
print response.request.headers
print ''
print response.headers
print ''
print response.content[-1000:]
print ''
print response

5. Pourquoi le résultat renvoyé ne correspond-il pas aux données json attendues ? . .

response.url:
https://so.dajie.com/job/ajax/search/filter?salary=&city=&ajax=1&positionFunction=&_CSRFToken=&keyword=python&recruitType=&order=0&experience=&page=5

response.request.headers:
{'accept-language': 'zh-CN,zh;q=0.8', 'accept-encoding': 'gzip, deflate, sdch', 'X-Requested-With': 'XMLHttpRequest', 'accept': 'application/json, text/javascript, */*; q=0.01', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', 'Connection': 'keep-alive', 'referer': 'https://so.dajie.com/job/search?keyword=%E9%A3%9E%E5%88%A9%E6%B5%A6&from=job&clicktype=blank', 'cookie': 'DJ_UVID=MTQ5MDMyMTExNTAzODM2MTc5; DJ_RF=empty; DJ_EU=http%3A%2F%2Fjob.dajie.com%2F; __login_tips=1; dj_cap=9c8c95bdef72e84a9bd7493a5ab91694; USER_ACTION="request^A-^A-^Ajobdetail:^A-"; SO_COOKIE_V2=0c7cGprjIH0q9RHc53CWLLXf151DQ5QvUP5ccPQj4g0B/izuXHm8sp41lJjJJh3nmjAkroj8JczFN/SCLPAUzbOHW7wYWmQ6Zu7s', 'method': 'get'}

response.headers:
{'Date': 'Wed, 19 Apr 2017 02:00:47 GMT', 'Content-Length': '5944', 'ETag': '"552f21de-1738"', 'Content-Type': 'text/html; charset=UTF-8', 'Connection': 'keep-alive'}

response.content[-1000:]:
,这个页面去火星了,试试搜索一下吧:</p>
    <form action="http://so.dajie.com/job/search" target="_top" class="search" method="get">
      <input type="text" placeholder="搜索感兴趣的职位" autocomplete="off" name="keyword"/><button type="submit">搜索</button>
      <input type="hidden" name="jobsearch" value="8"/>
    </form>
  </p>
   <p class="error-404">
     <p class="buttonwrap">
       <a  class="button guest" id="guest" title="" href="http://www.dajie.com/"><b>逛逛大街</b></a>
       <a  class="button report" id="report" title="" href="mailto:service@dajie.com"><b>报告管理员</b></a>
     </p>
   </p>
  </p>
  <script type="text/javascript">
    $(function(){
      $('input[placeholder]').each(function(){
        var $dom = $(this);
        var tip = $dom.attr('placeholder');
        $.placeholder($dom, {
          placeTextClass : 'placeholder',
          placeText : tip
        });
      });
    });
  </script>
 </body>
</html>

response:
<Response [299]>

Questions :
1. 'https://so.dajie.com/job/ajax...', pourquoi cette page n'ouvre-t-elle pas une page de données json ? Le lien donné dans le tutoriel que j'ai regardé auparavant ouvre le montant des données, par exemple : « https://rate.tmall.com/list_d... ».
2. C'est la première fois que j'utilise des requêtes pour demander des données ajax. Y a-t-il quelque chose de moins à écrire lors de la requête ?
2. J'ai juste essayé de modifier divers paramètres de requête, mais je n'arrive toujours pas à obtenir les données json. Ma réflexion va-t-elle dans la mauvaise direction ?

Merci.

大家讲道理大家讲道理2681 Il y a quelques jours2081

répondre à tous(1)je répondrai

  • 黄舟

    黄舟2017-05-18 11:03:06

    # coding: utf-8
    
    import requests
    
    url = 'https://so.dajie.com/job/search'
    page_url = 'https://so.dajie.com/job/ajax/search/filter?keyword=python&order=0&city=&recruitType=&salary=&experience=&page=1&positionFunction=&_CSRFToken=&ajax=1'
    
    session = requests.Session()
    session.headers['referer'] = url
    session.headers['user-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
    
    session.get(url)
    r = session.get(page_url)
    print r.text
    

    Passer les cookies directement

    # coding: utf-8
    
    import requests
    
    data = {
        'keyword': 'python',
        'order': '0',
        'city': '',
        'recruitType': '',
        'salary': '',
        'experience': '',
        'page': '5',
        'positionFunction': '',
        '_CSRFToken': '',
        'ajax': '1'
    }
    
    headers = {
        'cookie': 'DJ_RF=empty; DJ_EU=http%3A%2F%2Fso.dajie.com%2Fjob%2Fsearch%3Fkeyword%3Dpython%26jobsearch%3D8; DJ_UVID=MTQ5MjU2OTgxOTU1ODg0Mzk1; __login_tips=1; dj_cap=1e41c3c0ca9602c45e6481cb53c19774; SO_COOKIE_V2=6a297gxq5vDDnl9D4q04fhTgrWB11xG9lMj7iLcnP1uM/Zuzzx1dkeHauV4blsO1KsRYQKEQDrDGdiAhRE9efdI8PnREZK1MhzR4',
        'referer': 'https://so.dajie.com/job/search',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
    }
    r = requests.get('https://so.dajie.com/job/ajax/search/filter', data=data, headers=headers)
    print r.text

    répondre
    0
  • Annulerrépondre