crawler - Bagaimana untuk melengkapkan halaman fungsi JavaScript beralih dalam perangkak Python?
typecho
typecho 2017-06-13 09:24:39
0
2
1482

Apabila saya merangkak halaman web, saya perhatikan bahawa perubahan halamannya dilaksanakan oleh fungsi sedemikian Selepas membelok halaman, URL halaman tidak berubah:

<input class="buttonJump" name="goto2" onclick="dirGroupMblogToPage(document.getElementById('dirGroupMblogcp2').value)" type="button" value="Go"/>
     </input>
     
     
function dirGroupMblogToPage(currentPage){

    jQuery.post("dirGroupMblog.action", {"page.currentPage":currentPage,gid:MI.TalkBox.gid}, function(data){$("#talkMain").html(data);
        window.scrollTo(0, $css.getY(MI.talkList._body)-65);
    });

}

Menulis fungsi seperti ini untuk cuba mencapai perubahan halaman:

def login_page(login_url, content_url, usr_name="******@126.com", passwd="******"):
    # 实现登录, 返回Session对象和获得的页面
    post_data = {'r': 'on', 'u': usr_name, 'p': passwd}
    s = requests.Session()
    s.post(login_url, post_data)
    r = s.get(content_url)
    return s, r

def turn_page(s, next_page, content_url):
    post_url = "http://sns.icourses.cn/dirGroupMblog.action"
    post_headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", 
               "X-Requested-With":"XMLHttpRequest"}
    post_data = {"page.currentPage": next_page, "gid": 2632}
    s.post(post_url, data=post_data, headers = post_headers)
    res = s.get(content_url)
    return res

Tetapi penukaran halaman gagal selepas memanggil turn_page(). Bagaimana kita harus menyelesaikan masalah ini? Juga, apakah jenis pengetahuan yang perlu kita pelajari untuk menyelesaikan masalah seperti ini?

typecho
typecho

Following the voice in heart.

membalas semua(2)
阿神
  • Disyorkan menggunakan selenium

  • Sebagai contoh, jika anda perlu mengklik butang halaman seterusnya pada antara muka, atau anda perlu memasukkan kekunci atas, bawah, kiri dan kanan, halaman itu boleh diputar, pemacu web selenium boleh melakukannya dan memberi rujukan (Saya pernah merangkak novel laman web Cina Qidian )

  • Selenium boleh berinteraksi dengan halaman, klik, dwiklik, masuk, tunggu halaman dimuatkan (penantian tersirat, dan tunggu eksplisit). . . .

from selenium import webdriver
# from selenium.webdriver.common.keys import Keys

#driver = webdriver.PhantomJS(executable_path="D:\phantomjs-2.1.1-windows\bin\phantomjs")
# 我的windows 已配置环境变量,不需指定 executable_path,使用 Chrome需要对应的浏览器以及驱动程序
driver = webdriver.Chrome()

# url 为你需要加载的页面url
url = 'http://sns.icourses.cn/*****'

# 打开页面
driver.get(url)

# 在你的例子中,是需要点击 button ,通过class 属性获取到button,然后执行单击 .click()
# 如果需要准确定位,可以自行搜索其他的 find_
driver.find_element_by_class_name("buttonJump").click()

# selenium webdriver 还有很多其它高级的用法,自行谷歌,你这个问题,搜索应该是能得到答案的,
Ty80

Terdapat beberapa situasi,
1 Halaman boleh diputar dengan meluncur atau mengklik melalui kesan js
2

Anda boleh menggunakan analisis rangkaian dalam alat pembangun Chrome untuk mendapatkan hasil, sama ada halaman html atau pemaparan json maklum balas.

json lebih mudah dikendalikan, hanya dapatkan hasilnya secara terus. Halaman html biasa perlu menggunakan pemadanan biasa dengan pemisah halaman. Kemudian masukkan pautan ke dalam kolam untuk dirangkak.

/a/11...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan