微立顶科技

新闻资讯

创新 服务 价值

  分享一个特殊的网站采集方案和代码

发布日期:2023/11/19 16:10:34      浏览量:

一般的文章类型网站采集,每个栏目都有一个固定名称的文件夹,列表页也有明确的分页标签,这种网站采集很容易实现

下面这个科学网站,就很特别,应该采用的动态参数,每个栏目进去参数不同,但是每个分页的页面地址都一毛一样~

初步判断是,每个分类进去带的动态参数存进了全局变量,每个分页都是后台进行的动态加载+JS实现的,所以,采集这种网站,采集分页还必须通过每个栏目的主页进去,使用浏览器的Driver来动态模拟进行操作,检测到操作结果完成后,再取HTML代码进行分析采集和使用

参考案例和代码如下:


Code:


from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 用户应根据自己的环境修改WebDriver路径
webdriver_path = ’C:/Windows/System32/msedgedriver.exe’

# 使用Service对象指定Edge WebDriver路径
s = Service(executable_path=webdriver_path)
driver = webdriver.Edge(service=s)

# 打开栏目网页入口地址
driver.get(’https://book.sciencereading.cn/shop/book/Booksimple/list.do?showQueryModel.dp1Value=75e48243889111e7a2df00163e2ed6f9’)

def get_page_html(page_number):
    try:
        # 等待分页导航的出现
        WebDriverWait(driver, 30).until(
            EC.presence_of_element_located((By.CLASS_NAME, ’pagination’))
        )

        # 如果不是第一页,点击对应页码
        if page_number != 1:

            driver.execute_script(f"setPageNumber(’{page_number}’)")

            # 等待新页面加载
            WebDriverWait(driver, 30).until(
                EC.presence_of_all_elements_located((By.CLASS_NAME, ’pagination’))  # 需要根据页面实际内容修改
            )
           

        # 返回页面HTML
        return driver.page_source
    except Exception as e:
        print(f"An error occurred: {e}")
        return None

# 获取第3页的HTML
page_1_html = get_page_html(1)

page_3_html = get_page_html(3)

# 关闭WebDriver
driver.quit()

print(page_3_html)




  业务实施流程

需求调研 →

团队组建和动员 →

数据初始化 →

调试完善 →

解决方案和选型 →

硬件网络部署 →

系统部署试运行 →

系统正式上线 →

合作协议

系统开发/整合

制作文档和员工培训

售后服务

马上咨询: 如果您有业务方面的问题或者需求,欢迎您咨询!我们带来的不仅仅是技术,还有行业经验积累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     联系人:石先生/雷先生