cari

Rumah  >  Soal Jawab  >  teks badan

网页爬虫 - python如何爬取js生成的数据?

我想要爬取豆瓣音乐music.douban.com上的 新碟榜 和 近期热门歌单 ,看源代码好像都是js生成的,请教大家有什么办法可以爬到这些数据?谢谢!

高洛峰高洛峰2887 hari yang lalu477

membalas semua(9)saya akan balas

  • 高洛峰

    高洛峰2017-04-17 17:58:25

    Saya menggunakan Jsoup untuk menulis perangkak, dan biasanya menemui html yang tidak mengembalikan kandungan. Tetapi penyemak imbas memaparkan beberapa kandungan. Mereka semua menganalisis log permintaan http halaman. Analisis kod JS halaman untuk menyelesaikannya.

    1. Beberapa elemen halaman disembunyikan->Tukar pemilih untuk menyelesaikan masalah
    2. Beberapa data disimpan dalam objek js/json->Pisahkan rentetan yang sepadan dan analisis penyelesaiannya
    3. Melalui antara muka api Panggilan->Permintaan palsu untuk mendapatkan data

    Terdapat juga kaedah muktamad
    4. Gunakan penyemak imbas tanpa kepala seperti phantomjs atau casperjs

    balas
    0
  • 黄舟

    黄舟2017-04-17 17:58:25

    Beberapa jawapan menyebut bahawa ia boleh dilakukan untuk menganalisis antara muka dan merangkak secara langsung antara muka Selain itu, jika anda terus merangkak antara muka, anda tidak perlu menghuraikan sendiri HTML, kerana kebanyakan antara muka mengembalikan json. Saya berasa gembira hanya memikirkannya~

    Walau bagaimanapun, masih terdapat kaedah lain, seperti menggunakan Phantomjs, yang mudah dan mudah untuk digunakan, dan ia akan menjadi lebih bernilai apabila dipasangkan dengan alat lain. Saya juga mempunyai beberapa projek kecil gabungan sedemikian.

    Ini ialah kod contoh rasmi, yang boleh dicapai dengan sedikit pengubahsuaian.

    console.log('Loading a web page');
    var page = require('webpage').create();
    var url = 'http://phantomjs.org/';
    page.open(url, function (status) {
      //Page is loaded!
      phantom.exit();
    });

    Pengubahsuaian

    var page = require('webpage').create();
    var url = 'http://phantomjs.org/';
    page.open(url, function (status) {
      page.evaluate(function() {
        // 页面被执行完之后,一般js生成的内容也可以获得了,但是Ajax生成的内容则不一定
        document.getElementById('xxx'); // 可以操作DOM,这里你就可以尝试获取你想要的内容了
        // ...
      })
      phantom.exit();
    });
    

    Tetapi sebenarnya, dalam banyak kes, anda perlu menunggu Ajax dilaksanakan sebelum mula menghuraikan kandungan halaman Pada masa ini, anda boleh menggunakan kod contoh rasmi, anda boleh menunggu semua permintaan untuk halaman ini dimuatkan Kemudian teruskan pemprosesan, kemudian anda akan mendapat halaman yang dimuatkan sepenuhnya, dan kemudian anda boleh melakukan apa sahaja yang anda perlu lakukan.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 17:58:25

    Cari sendiri antara muka data

    balas
    0
  • ringa_lee

    ringa_lee2017-04-17 17:58:25

    Semuanya harus dijana oleh antara muka API

    balas
    0
  • 高洛峰

    高洛峰2017-04-17 17:58:25

    Contoh penggunaan selenium untuk melombong carta cakera baharu:

    from selenium import webdriver
    dirver = webdriver.Chrome()
    dirver.get('https://music.douban.com/')
    for i in dirver.find_elements_by_css_selector('.new-albums .album-title'):
        print i.text
    

    Keputusan:
    Buka hari ini
    Kisah Tepi Katil Jay Chou
    H.A.M.
    3집EX'ACT
    Liar
    Wanita Berbahaya
    Dalam Gelap
    Tahun Lepas Rumit

    balas
    0
  • 阿神

    阿神2017-04-17 17:58:25

    Chrome, tekan F12, klik, lihat permintaan, mudah untuk mencari URL dan parameter, hanya bina sendiri, dan kemudian menghuraikan kandungan yang dikembalikan.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 17:58:25

    Barisan js ini dipetik di bawah index.html.

    <script type="text/javascript" src="https://img3.doubanio.com/misc/mixed_static/37fa28b9fa94889c.js"></script><script type="text/javascript">
    

    Buka fail js ini dan anda boleh lihat

      React.render(React.createElement(component, {"moreUrl":"\/chart","sections":[{"albums":[{"name":"今日營業中","performers":"林宥.................

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 17:58:25

    Buka chrome untuk memeriksa elemen dan cari js dalam rangkaian Secara amnya, js dengan nama istimewa mungkin yang anda cari. Contohnya, yang ini,

    balas
    0
  • 黄舟

    黄舟2017-04-17 17:58:25

    Cara paling langsung ialah menggunakan selenium

    balas
    0
  • Batalbalas