论文爬虫_IEEE_selenium方法

selenium爬虫获取IEEE论文信息

手动输入关键词,自动查询
获取论文名称,文章全文链接,期刊名称及论文信息,如下

{'title': 'Timeliness-Aware Incentive Mechanism for Vehicular Crowdsourcing in Smart Cities', 'link': 'https://ieeexplore.ieee.org/document/9328457/', 'journal': 'IEEE Transactions on Mobile Computing', 'article_info': 'Year: 2022 | Volume: 21, Issue: 9 | Journal Article | Publisher: IEEE'}


前言

针对不同功能定义函数模块

  • 初始化函数
  • 关键字搜索函数
  • 页面滚动函数
  • 数据获取解析函数
  • 数据保存函数
  • 翻页函数

一、CODE

# 主页面
url = 'https://ieeexplore.ieee.org/Xplore/home.jsp'

完整代码

import random
import time
from pymongo import MongoClient
from selenium import webdriver
from selenium.webdriver.common.by import By


class Paper():
    def __init__(self):
        options = webdriver.ChromeOptions()
        options.add_argument('--disable-blink-features=AutomationControlled')
        # 隐藏"Chrome正在收到自动软件的控制"
        options.add_experimental_option('useAutomationExtension', False)
        # 去掉开发者警告
        options.add_experimental_option('excludeSwitches', ['enable-automation'])
        # 打开指定浏览器,初始化设置
        self.browser = webdriver.Chrome('D:\Program Files\Python\ChromeDriver 107.0.5304.62.exe', options=options)

    # 打开指定页面,输入关键字,并点击搜索
    def query_keywords(self, keywords):
        # 加载指定页面
        self.browser.get('https://ieeexplore.ieee.org/Xplore/home.jsp')
        # 设置10秒后执行下一步
        time.sleep(10)
        # 通过tag属性选择文本框元素,并设置内容
        input_tag = self.browser.find_element(By.TAG_NAME, "input")
        # 在文本框输入关键字
        input_tag.send_keys(keywords)
        # 通过tag属性获取搜索按钮,并执行点击操作
        self.browser.find_element(By.TAG_NAME, 'button').click()

    # 向下滚动页面
    def scroll_down_page(self):
        # 循环分8次将页面加载完成(可自定义)
        for i in range(1, 9):
            # 每次位置信息
            j = i / 10
            # js语法,document获取属性、获取整个页面的长度,传入长度占比数值
            js = f"document.documentElement.scrollTop = document.documentElement.scrollHeight * {j}"
            # 移动页面到指定位置
            self.browser.execute_script(js)
            # 随机暂停时间,滚动页面
            time.sleep(random.randint(400, 800) / 1000)

    # 获取数据并解析
    def get_parse_data(self, *args):
        self.scroll_down_page()
        # xpath选择器定位,选择所有文章的div
        divs = self.browser.find_elements(By.XPATH, './/div[@class="List-results-items"]')
        # 设置计数器,方便检查结果
        cnt = 1
        # 循环取出每篇论文信息
        for div in divs:
            title = div.find_element(By.XPATH, './/h2[@class="text-md-md-lh"]/a')
            link = div.find_element(By.XPATH, './/h2[@class="text-md-md-lh"]/a').get_attribute('href')
            journal = div.find_element(By.XPATH, './/div[@class="description text-base-md-lh"]/a')
            article_info = div.find_element(By.XPATH, './/div[@class="description text-base-md-lh"]/div')
            # 将信息写入字典
            items = {
                'title': title.text,
                'link': link,
                'journal': journal.text,
                'article_info': article_info.text
            }
            # 打印检查提取结果
            print(cnt, items)
            cnt += 1
            # 调用保存数据函数,逐条将字典保存到mongo数据库
            self.save_mongo(items)
        # 本页结束,调用下页函数
        self.next_page()

    # 保存数据到mongo数据库,传入数据参数
    def save_mongo(self, data):
        # print(data)
        # 连接数据库
        client = MongoClient()
        # 使用数据库表格
        col = client['paper']['IEEE']
        # 判断数据类型并进行插入操作
        if isinstance(data, dict):
            res = col.insert_one(data)
            return res
        else:
            return 'wrong type %s' % type(data)

    # 网页翻页函数
    # 如最后一页或倒数第二、三页没有下一页选项,则会停止翻页(亲测7页抓取了5页)
    def next_page(self):
        try:
            # 在当前页提取下一页提示项
            next = self.browser.find_element(By.XPATH, './/li[@class="next-btn"]')
            # 判断是否有下一页
            if next:
                # 点击进入下一页
                next.click()
                # 调用获取和分析数据函数
                self.get_parse_data()
            else:
                # 如果没有下一页,则关闭浏览器
                self.browser.close()
        except Exception as e:
            print(e)

if __name__ == '__main__':
    paper = Paper()
    # 提示输入要查询的关键词
    print('please entry keywords you want to query:')
    keywords = str(input())
    # 调用查询关键词函数
    paper.query_keywords(keywords)
    # 调用获取数据和解析数据函数
    paper.get_parse_data()

二、TODO

  • 指定页数,获取数据
  • 进一步解析论文信息,独立划分year,volume,type,publisher并保存
  • 跳转进入论文主页获取更多信息

总结

本文仅实现基本爬取任务,由于时间不多、需求不大,暂满足爬取需求,先进行阶段性的记录,后续有时间和需求再进行完善。

有什么问题和不足的地方欢迎大佬指教。
(如有大佬闲暇之余进行爬虫升级,还请评论更新,不胜感激)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值