使用selenium框架的根据关键词知网论文爬虫保存至mongoDB数据库可视化

本文介绍了如何使用Python的Selenium库配合BeautifulSoup进行网页抓取,包括设置Chrome浏览器、定位搜索元素、筛选和分页,以及解析HTML并存储数据到MongoDB数据库的过程。
摘要由CSDN通过智能技术生成
# 导入expected_conditions类
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
# 导入BeautifulSoup库

from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
# 导入TimeoutException
from selenium.common.exceptions import TimeoutException
# 导入pymongo模块
import pymongo
# 导入time模块
import time
from selenium.webdriver.chrome.service import Service

先导入所需要的模块

# 初始化Google Chrome浏览器对象,赋值给browser
from selenium.webdriver.support.wait import WebDriverWait

设置好自己下载的chromedriver文件路径

driver_path = r"E:\a谷歌浏览器下载内容\chromedriver-win642\chromedriver-win64\chromedriver.exe"
service = Service ( driver_path )
browser= webdriver.Chrome ( service=service )

设置数据库

# browser = webdriver.Chrome()
# 初始化WebDriverWait对象
wait = WebDriverWait(browser, 10)
# 创建MongoClient对象实例
client = pymongo.MongoClient('localhost', 27017)
# 连接数据库,如果不存在则创建一个数据库
mongo = client.cnki
# 连接集合,如果不存在则创建一个集合
collection = mongo.papers
# 定义搜索函数,根据输入的关键字搜索
def searcher(keyword):
    # 请求中国知网首页,并打开浏览器
    browser.get('https://www.cnki.net/')
    browser.maximize_window()  # 最大化窗口
    time.sleep(2)  # 休眠2s

    # 寻找id属性值为“txt_SearchText”的输入框,并赋值给input
    input = wait.until(
        EC.presence_of_element_located((By.ID, 'txt_SearchText'))
    )
    input.send_keys(keyword)  # 输入关键字“Python”

    # 寻找“搜索”按钮并点击
    wait.until(EC.presence_of_element_located(
        (By.CLASS_NAME, 'search-btn'))).click()
    time.sleep(3)  # 休眠3s

    # 寻找筛选项并点击
    wait.until(EC.presence_of_element_located(
        (By.CSS_SELECTOR, "[class='icon icon-sort']"))).click()

    # 寻找并点击显示“50”条的选项
    wait.until(EC.presence_of_all_elements_located(
        (By.CSS_SELECTOR, '#id_grid_display_num ul li')))[2].click()
    time.sleep(3)  # 休眠3s

    parse_page()  # 调用 parse_page 函数

页面爬取函数代码

def parse_page():
    wait.until(
        EC.presence_of_all_elements_located(
            (By.CSS_SELECTOR, '.result-table-list tbody tr')
        )
    )
    html = browser.page_source  # 获取HTML源代码
    # 创建BeautifulSoup对象,将页面解析为lxml格式
    soup = BeautifulSoup(html, 'lxml')
    # 根据CSS选择器抓取内容
    items = soup.select('.result-table-list tbody tr')
    # 遍历列表,提取文献信息
    for i in range(0, len(items)):
        item = items[i]
        detail = item.select('td')  # 根据CSS选择器抓取td标签
        paper = {
            'index': detail[0].text.strip(),
            'title': detail[1].text.strip(),
            'author': detail[2].text.strip(),
            'resource': detail[3].text.strip(),
            'time': detail[4].text.strip(),
            'database': detail[5].text.strip()
        }
        print(paper)  # 输出文献信息
        data_storage(paper)  # 调用 data_storage 函数

其他工具类函数略过

效果展示

可视化结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值