爬虫之如何处理javascript按钮点击翻页

最近写爬虫的时候遇到翻页链接是javascript的情况(案例页面 http://h.bkzx.cn/country

注意左下角

访问这个页面的时候,我们会发现: 点击页码按钮跳转页面时,网页的 URL 并没有发生变化,想靠直接改变url来实现爬虫翻页是不行了。怎么办呢?我们把鼠标放在按钮上,在浏览器(chrome)的左下角我们可以发现 javascript:gotoPage('1') 的字样,打开 view-source:http://h.bkzx.cn/country ,搜索一下"javascript:gotoPage",会发现每个按钮都调用了这么一个叫 gotoPage的javascript 函数

页面源代码(局部)
Python网络爬虫权威指南

翻开《Python网络爬虫权威指南(第二版)》第11章 抓取 JavaScript, 里面介绍了爬虫处理 Javascript的方法,一种是通过Ajax,一种是Selenium。 Selenium 功能比较强大,但是运行比较慢,不得已时才用之,所以先看看通过Ajax能不能解决。

回到 页面 view-source:http://h.bkzx.cn/country 源代码,找到gotoPage函数

function gotoPage(index) {
        var letter = $("#letter").val();
        var query = $("#query").val();
        $.ajax({
            method: "get",
            url: "/countryList",
            data: {
                pageNo: index,
                letter: letter,
                query: query,
                continent:$("#continent").val()
            },
            success: function (data) {
                $("#itemList").html(data);
                $('html,body').animate({scrollTop: '0px'}, 0);
            }
        });
    }

其实看的很清楚了,这个翻页函数是通过Ajax 访问 /countryList ,主要的请求参数则是 pageNo, 我们试一下 http://h.bkzx.cn/countryList?pageNo=2, 会发现能顺利打开第二页。

下面的爬虫就很好写了

import requests
from bs4 import BeautifulSoup
import time

countries = []
for page in range(1, 13):
    # 逐一访问每一页
    res = requests.get('http://h.bkzx.cn/countryList?pageNo=' + str(page)).content
    bs = BeautifulSoup(res, features="html.parser")
    
   # 解析每一页里的国名信息
    for contry in bs.find_all('h3'):
        countries.append(contry.string)
    time.sleep(5)

print(countries)

'''
['阿尔巴尼亚', '阿尔及利亚', '阿富汗', '阿根廷', '阿拉伯联合酋长国', '阿鲁巴 (荷兰)', '阿曼', '阿塞拜疆', '埃及', '埃塞俄比亚', '爱尔兰 ', '爱沙尼亚', '安道尔', '安哥拉', '安圭拉 (英) ', '安提瓜和巴布达', '奥地利 ', '澳大利亚 ', '巴巴多斯', '巴布亚新几内亚', '巴哈马', '巴基斯坦', '巴拉圭', '巴勒斯坦', '巴林', '巴拿马', '巴西', '白俄罗斯', '百慕大 (英)', '保加利亚', '北马里亚纳群岛 (美)  ', '贝宁', '比利时', '秘鲁', '冰岛', '波兰', '波多黎各 (美) ', '波斯尼亚和黑塞哥维那', '玻利维亚', '伯利兹']
'''

是不是很容易啊?😄

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网络爬虫开发 第1章 课程介绍 什么是爬虫 爬虫的意义 课程内容 前置知识 什么是爬虫 可以把互联网比做成一张“大...
    强某某阅读 787评论 0 1
  • @转自GitHub 介绍js的基本数据类型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou阅读 1,226评论 0 0
  • 什么是Ajax: Ajax(Asynchronouse JavaScript And XML)异步JavaScri...
    朝南而行_阅读 2,792评论 2 10
  • 文:华尔街见闻 金泽 财政部税政司、国家税务总局政策法规司、证监会会计部近日就沪港通试点及QFII、RQFII等政...
    7f67504d611e阅读 208评论 0 2
  • 一个人在小时候不习惯于让自己的意志屈从别人(大人)的理性,到了自己能够运用理性的时候,也不会听从自己的理性。 ...
    般若之光阅读 256评论 0 0