利用PhantomJS插件爬取SSCI目录的几点收获

本文介绍了一种使用PhantomJS和selenium实现动态翻页的SSCI期刊爬虫方案,详细解析了如何通过input标签进行翻页操作,并讨论了内存管理和断点重连的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 前言

       我们打算构建一个有关ssci中收录的期刊信息的数据库,但是官网上并没有提供可以直接下载的目录信息,所以着手对其目录网页(http://mjl.clarivate.com/cgi-bin/jrnlst/jlsubcatg.cgi?PC=SS)进行爬取。页面调研发现,检索框内的类别url可以通过定位li标签直接获取,但是进入到每个页面之后,需要通过动态点击进行翻页,所以本次程序使用了PhantomJS插件实现了动态翻页的操作。

1 准备工作

    1)PhantomJS插件(http://phantomjs.org/download.html);

    2)selenium包 (pip install selenium);

    3)操作系统、硬件及环境配置:win10 x64, AMD10, 8GB,Python3.5.2。

2 爬取方案

1)调用PhantomJS插件

phantomjs_path='./lib/phantomjs_119912/bin/phantomjs.exe'  # 定位到插件的exe文件位置
driver = webdriver.PhantomJS(executable_path=phantomjs_path)  # 配置插件路径
driver.get(url)  # 访问网页

    

2)首先不难发现,进入目录以后是一个动态页面,通过input标签进行翻页。如图:

通过input标签进行翻页
​​​​

 

此处我们就不能像平时一样使用 “标签.click()”方法进行提交,而是调用send_keys(self)方法进行,具体代码如下:

global p_num
p_num = 1

def main():
    ...  # 配置的配置与获取标签的过程省略,以下主要展示翻页原理。
    get_ssci_issn(driver, filed[0]) # 第一页不需要翻页,所以直接调用函数即可
    while True:
        have_next_page = next_page(driver)  # 判断是否有下一页
        if have_next_page is None:
            break  # 没有就退出
        get_ssci_issn(driver, filed[0])  # 没退出继续进行爬取

def get_ssci_issn(driver,filed_name):
     '获取页面下所有的期刊的issn号,写入数据库,此处具体代码省略'
     ...

def next_page(driver): 
    '判断是否有下一页的标签'
    global p_num
    p_num += 1
    print('下一页, 第' + str(p_num) + '页')  # 页码计数
    page = driver.find_element_by_id('results')
    pager = page.find_element_by_xpath("//div[@class='pager']")  # 定位标签位置

    try:
        if pager.find_elements_by_name('NEXT') is not None:  # 判断是否是最后一页(只有最后一页是没有name='NEXT'标签的)
            next = pager.find_elements_by_name('NEXT')[0]  # 获取下一页的标签,by name返回列表格式
            next.send_keys('next arrow')  # 提交元素 alt
            time.sleep(3)
        else:
            return None # 没有下一页,返回none,停止循环
    except Exception as e:
        print('there is no next page.')
        return None
    return True

       利用next.set_keys('next arrow')的方法,直接让页面进行跳转,完成翻页动作,然后再main()中,由于是动态页面,页面的内容变了,但是之前所配置的driver信息还是没有改变的,所以这里可以直接传入driver参数进行爬取。

    3)设置休眠时间,防止过于频繁的点击而引起反爬机制。如:time.sleep(3)

 

3 总结

     采用PhantomJS插件对内存的大小有一定的要求,如果内存满了,就会停止爬取,所以,要对爬虫断点重连有一定的要求,增强程序的鲁棒性。

      对于本实验中所爬取的网页,数据量并不是很大,所以可以较为方便的进行动态网页的操作。可以作为以后解决动态页面的方法之一。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值