对于无法直接获取URL的数据爬虫

news/2024/7/19 8:41:34 标签: 爬虫

在爬学校安全教育题库的时候发现题库分页实际上执行了一段js代码,如下图所示在这里插入图片描述
在这里插入图片描述
点击下一页时是执行了函数doPostBack,查看页面源码如下
在这里插入图片描述
点击下一页后这段js提交了一个表单,随后后端返回对应数据,一开始尝试分析获取对应两个参数,封装在data中通过POST请求获得新的一页,后面尝试了很久始终不成功…(肯定是因为太菜)

没办法只能使用神器selenium,缺点是要调用浏览器,肯定是比较慢的,但是python直接给你模拟浏览器的各种操作,而且不用抓包分析,比较方便。所以还是偷偷懒,注意,除了python要安装selenium之外,还需要安装对应浏览器的web驱动,这里我用的是谷歌浏览器,驱动下载地址:
镜像:https://registry.npmmirror.com/binary.html?path=chromedriver/
如果你谷歌版本新,镜像上可能没有对应版本。
官网:https://sites.google.com/chromium.org/driver/downloads(117以上在这里找:这里~)

下载好后就是正常的爬虫步骤,直接看代码吧:

import docx
from selenium import webdriver
import html2text
import time

idx = [4, 5, 9, 10, 11, 13, 14, 15, 16]
srcsel = 'xxxx/Web/userSingle.aspx?ID='  # 选择题
srcjg = 'xxxx/Web/userIs.aspx?ID='  # 判断题


def remove_tags(text):
    h = html2text.HTML2Text()
    h.ignore_links = True
    return h.handle(text)


def process(url):
    driver = webdriver.Chrome()
    driver.get(url)
    res = driver.find_element("id", 'GridViewx').get_attribute('innerHTML')
    res = remove_tags(res)
    doc.add_paragraph().add_run(res)
    pages = int(driver.find_element("id", 'GridViewx_ctl13_lblPageCount').text)
    # pages = 2
    for i in range(pages - 1):
        time.sleep(1.5)
        driver.find_element("id", 'GridViewx_ctl13_btnNext').click()
        res = driver.find_element("id", 'GridViewx').get_attribute('innerHTML')
        res = remove_tags(res)
        doc.add_paragraph().add_run(res)
    driver.quit()


doc = docx.Document('res.docx')
for pid in idx:
    process(srcsel + str(pid))
    time.sleep(3)
    process(srcjg + str(pid))
doc.save('res.docx')

为什么多此一举用html2text呢?因为发现这样写又能比较好看(和丑的比起来)还不用自己一条数据一条数据取出来排版。然后代码里我直接写进word文档里了,这里有个小坑,你的word文档(docx)中必须得有东西,不能是空的,要不然会报错…

懒得排版,凑合看看

http://www.niftyadmin.cn/n/5072315.html

相关文章

如何进行模块化编程和头文件的使用?

模块化编程和头文件的使用是C语言中非常重要的概念,它们有助于将程序分解成更小、更易管理的部分,提高了代码的可维护性、可重用性和可读性。本文将详细解释如何进行模块化编程以及头文件的使用。 什么是模块化编程? 模块化编程是一种将程序…

stm32之手动创建keil工程--HAL库

用CubeMx创建了好多stm32的工程,这里记录下手动创建keil工程的过程。完整工程在最后。 一、准备工作 1.1、下载对应的HAL库, 这里使用的是stm32f103c8t6, 下载地址stm32HAL库 在页面中输入对应型号点击进行二级页面进行下载 下载的之后的目录如下&am…

京东快递超时件查询:教你如何操作

近年来,随着电商的快速发展,物流行业也迎来了蓬勃的发展。然而,由于物流订单数量庞大,物流公司在处理这些订单时往往会遇到一些瓶颈,例如超时订单的筛选。为了提高物流效率,许多物流公司采用了智能筛选超时…

【Solidity】智能合约案例——①食品溯源合约

目录 一、合约源码分析: 二、合约整体流程: 1.部署合约 2.管理角色 3.食品信息管理 4.食品溯源管理 一、合约源码分析: Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址…

基于vue框架的uniapp小程序开发发现了新大陆

项目场景: 在基于vue框架的uniapp小程序开发中,在页面跳转时,当前页路径带参数,在跳转页中接受数据除了用官方推荐的保留当前页面,跳转到应用内的某个页面,使用onLoad(option)接受数据,但是我发…

IPV4跟IPV6的区别

如今互联网快速发展ipv4已经满足不了现在的需求,那么这时候就需要用更大的地址空间来代替,这时候ipv6就可以满足这一需求,相比ipv4它有更大的地址空间可供使用。下面我将分享一下有何区别。 IPv4与IPv6之间的区别: 1、地址长度的区别:IPv4具…

群狼调研(长沙社情民意调查)政府行政窗口神秘顾客暗访整改措施

1. 提高培训和意识:对行政窗口工作人员进行针对性培训,强调服务质量、沟通技巧和职业道德等方面的重要性。增加工作人员对神秘顾客调查的认识和理解,以增强其对服务改进的意识。 2. 建立绩效评估机制:制定明确的绩效评估标准&…

Linux配置SSH允许TCP转发

#编辑SSH配置文件 vi /etc/ssh/sshd_config #重启SSH服务 systemctl restart sshd.service AllowTcpForwarding yes