处理比赛数据记录

news2024/9/23 13:29:19

文章目录

    • 一、需求
    • 二、爬取阶段
      • 1.使用requests进行请求获取网页内容
      • 2.使用selenium模拟人操作浏览器获取网页内容
        • (1)环境配置
        • (2) 源码
      • 3.使用phantomjs模拟人操作浏览器获取网页内容

浅浅记录一下自己在做一个比赛数据处理过程中的遇到的一些问题。

一、需求

首先数据的格式是长下面图片这样的,左边是网站链接,右边是网站分类的标签,然后我要做的工作就是访问每个网站将网站的文本爬取下放在每个链接后边。

二、爬取阶段

下面就是我的尝试过程了😂

1.使用requests进行请求获取网页内容

import requests
from fake_useragent import UserAgent

def completionUrl(url):
    '''对url进行补全'''
    if "http" in url:
        return url
    else:
        url = f"http://" + url.strip('"')
        return url


def getContent(url):
    '''获取网页源代码'''
    # 对url进行补全
    url = completionUrl(url)
    # 发送请求获取网页内容 
    # 设置随机useragent简单防爬
    headers = {"User-Agent": UserAgent().random}
    try:
        resp = requests.get(url=url, headers=headers, verify=False)
        # print(resp.encoding)   # 查看返回内容的编码 针对对应的特殊编码进行解码
        if resp.encoding == "ISO-8859-1":
            # 解决ISO-8859-1编码问题
            html = resp.text.encode('ISO-8859-1').decode(requests.utils.get_encodings_from_content(resp.text)[0])
            # print(html)
        else:
            html = resp.text
        print(f"url:{url}  html:{html}")
        return html
    # 处理网站请求失败的情况
    except Exception as e:
        # print(f"ERROR of {url}",e)
        html = "网站请求失败"
        print(f"url:{url}  html:{html}")
        return html


if __name__ == '__main__':
    url = "www.baidu.com"
    content = getContent(url)

在使用requests发请求获取网页内容的时候发现,就是很多网站有针对requests请求的反爬机制。导致很多网站的数据无法获取,这个时候我就想到了模拟人的行为操作浏览器获取数据,虽然使用selenium可能也有部分网站会有反爬,但是情况应该比使用requests要好很多。

2.使用selenium模拟人操作浏览器获取网页内容

(1)环境配置

具体步骤可以参考博客microsoft edge驱动器下载以及使用
在使用selenium进行爬取之前,先要下载好相应的浏览器驱动。我用的是edge浏览器,所以我就下载edge浏览器的驱动。
根据你edge浏览器的版本,下载对应版本的驱动,可以看到我edge浏览器的版本号是109.0.1518.55

下载好了之后将msedgedriver.exe放置到你使用python环境中python.exe的同级目录下。

之后就是下载selenium包到你所用的环境即可。

(2) 源码

from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def completionUrl(url):
    '''对url进行补全'''
    if "http" in url:
        return url
    else:
        url = f"http://" + url.strip('"')
        return url

def driver():
    '''获取浏览器驱动对象'''
    # 准备好参数配置,将该参数传入Edge可以使其不弹出窗口 但是这个对selenium的版本要求较高,较低版本没有这个参数
    opt = Options()
    # opt.add_argument("--headless")
    # opt.add_argument('--disable-gpu')
    # # 设置随机user-agent 简单防爬
    # opt.add_argument(f'user-agent={UserAgent().random}')
    # 解决浏览器加载时间过长的问题
    # opt.page_load_strategy = 'eager'
    # driver = webdriver.Edge(options=opt)
    driver = webdriver.Edge()
    # 设置请求时间
    driver.set_page_load_timeout(15)
    return driver

def getHtmlBySelenium(url,driver):
    '''使用浏览器驱动对象获取网页内容'''
    # 对url进行补全
    url = completionUrl(url)
    html = driver.get(url)
    # 获取网页源码
    html = driver.execute_script("return document.documentElement.outerHTML")
    return html

if __name__ == '__main__':
    # 使用selenium模拟人操作浏览器获取网页内容
    url = "www.baidu.com"
    driver_ = driver()
    html = getHtmlBySelenium(url,driver_)
    print(f"html:{html}")

参考博客:
Selenium 等待与超时(一) - 知乎 (zhihu.com)
selenium之chrome浏览器设置userAgent和代理ip_夜阑卧听风吹雨,铁马冰河入梦来的博客-CSDN博客_selenium useragent

当我使用selenium之后还是发现了一些问题,每次使用edge浏览器爬取了差不多100个网址之后就不行了,后来怀疑是浏览器驱动的问题,换成了无头浏览器phantomjs。

3.使用phantomjs模拟人操作浏览器获取网页内容

安装使用可参考博客:

  • phantomjs下载安装与使用_李汶峰的博客-CSDN博客_下载plantomjs
  • Python爬虫:selenium使用chrome和PhantomJS实用参数_彭世瑜的博客-CSDN博客
    但是phantomjs对selenium的版本有所要求,新版selenium不支持PhantomJS 要用老版本吗 · Issue #48 · sczhengyabin/Image-Downloader (github.com),需要安装指定的selenium版本才可以使用。
from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def completionUrl(url):
    '''对url进行补全'''
    if "http" in url:
        return url
    else:
        url = f"http://" + url.strip('"')
        return url

def driver():
    '''获取浏览器驱动对象'''
    dcap = dict(DesiredCapabilities.PHANTOMJS)
    # 设置user-agent请求头
    dcap["phantomjs.page.settings.userAgent"] = UserAgent().random
    # 禁止加载图片
    dcap["phantomjs.page.settings.loadImages"] = False
    driver = webdriver.PhantomJS(desired_capabilities=dcap)
    # 设置请求时间
    driver.set_page_load_timeout(15)
    return driver

def getHtmlBySelenium(url,driver):
    '''使用浏览器驱动对象获取网页内容'''
    # 对url进行补全
    url = completionUrl(url)
    html = driver.get(url)
    # 获取网页源码
    html = driver.execute_script("return document.documentElement.outerHTML")
    return html

if __name__ == '__main__':
    # 使用selenium模拟人操作浏览器获取网页内容
    url = "www.baidu.com"
    driver_ = driver()
    html = getHtmlBySelenium(url,driver_)
    print(f"html:{html}")

最后发现确实phantomjs浏览器驱动比edge浏览器驱动好用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcWing 1064. 小国王(状态压缩DP)

AcWing 1064. 小国王一、问题二、思路1、整体逻辑2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、思路 1、整体逻辑 我们看下面这个例子: 如果我们一行一行放的话。 在上图中,我们先看第二行,我们发现第二行在哪个位…

NR R16 上行满功率传输(ULFPTx)

微信公众号同步更新,欢迎关注同名“modem协议笔记” UL full power Tx(ULFPTx Mode),上行满功率传输,是R16版本的一个增强,R15由于受限于codebook和PUSCH功率控制,某些情况下无法达到满功率传输(例如26dBm…

论文投稿指南——中文核心期刊推荐(建筑科学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

齐晖医药冲刺上市:毛利率持续下滑,刘祥宜和朱建民夫妇为实控人

近日,江苏齐晖医药科技股份有限公司(下称“齐晖医药”)递交预披露招股书,准备在上海证券交易所主板上市。本次冲刺上市,齐晖医药计划募资6.97亿元,将用于动保原料药生产基地项目、研发中心建设项目&#xf…

“编辑距离”系列总结,一文读懂(Java实现)

目录 一、判断子序列 ——>删除元素 1.1、dp定义 1.2、递推公式 1.3、初始化 1.4、遍历顺序 1.5、解题代码 二、不同的子序列 ——>删除元素 2.1、dp定义 2.2、递推公式 2.3、初始化 2.4、遍历顺序 2.5、解题代码 三、两个字符串的删除操作 ——>删除元素…

设计模式 - 六大设计原则之DIP(依赖倒置原则)

文章目录概述CaseBad ImplBetter Impl概述 设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 依赖倒置原则是实现开闭原则的重要途径之一, 它降低了类之间的耦合…

代码随想录算法训练营第十天 | 理论基础,232.用栈实现队列,225. 用队列实现栈

一、参考资料理论基础文章讲解:https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 用栈实现队列题目链接/文章讲解/视频讲解:https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E…

【Linux】多线程详解(上)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

百度2015年系统工程师笔试题:判断当前机器的大小端

本篇文章主要讲解大小端的判断问题,需要拥有指针,位段,联合体的知识。 目录 一.题目呈现 二.三种解题方法 1.巧妙利用指针和强制转换 2.利用位段的特性 3.利用联合体的性质 一.题目呈现 请简述大端字节序和小端字节序的概念,…

剑指 Offer 03. 无重复字符的最长子串 [C语言]

目录题目思路1代码1结果1思路2代码2结果2该文章只是用于记录考研复试刷题题目 Leetcode 03: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所…

A股上市公司招投标数据

一、数据简介 招投标是指在市场经济条件下进行大宗货物的买卖、工程建设项目的发包与承包以及服务项目的采购与提供时所采取的一种普遍交易方式。招标和投标是一种商品交易行为,是交易过程的两个方面。历经三十多年的发展,我国已经形成了覆盖全国各领域、…

Java类和对象的学习笔记

本篇介绍了面向对象和面向过程的关系,类的定义,对象的成员(成员变量,成员方法)和对象成员访问,类和对象的关系 对象的初始化,对象的构造(构造方法的定义和使用),对象内的this介绍和用法… 细节较多.建议收藏,看完此篇,踏上面向对象的第一步~ 类和对象的学习一.初识面向对象1.什…

一文读透JVM虚拟机结构[迭代中]

注: 码字辛苦, 转载请标注转载来源 jvm结构图: [1] 整个JVM架构包含三部分: 类加载 加载 双亲委派机制 链接 初始化 静态变量的初始值赋值 运行时数据区域 线程私有区域线程共享区域 执行引擎 解释器JIT即时编译器GC 运行时数据区域 线程私有区域: 线程私有区域主…

Springboot整合分布式链路追踪SkyWalking之探针使用和链路采集实战(二)

目录 1.链路追踪-框架Springboot项目搭建 1.1 创建一个Springboot项目 1.2 SpringBootMybaitsPlusMysql开发测试接口 1.2.1 添加依赖配置pom.xml 1.2.2 添加配置 application.properties 1.2.3 开发接口 ​ 2.分布式链路追踪的卧底 Skywalking Agent 探针介绍 2.1 Skyw…

Java设计模式-解释器模式Interpreter

介绍 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法 分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器解释器模式(Interpreter Patte…

Linux操作系统使用git提交代码

引言: 北京时间 2023/1/27/9:50,今天的起床时间9:05,可以看出我们是提前了一些些,但是不是我的功劳,当然也不是我的闹钟的功劳,毕竟我的闹钟是8:20和8:50的,因为我亲爱的老妈……懂…

threejs相机控件使用记录

文章目录前言控件列表轨迹球控制器(TrackBallControls)第一人称控制器(FirstPersonControls)飞行控制器(FlyControls)轨道控制器(OrbitControls)总结前言 threejs提供了很多摄像机控…

mixamo和ue小白人映射关系以及让mixamo绑定的人物在场景中运动的多种方法实践...

ue中的root->Hips ue中 ik_foot_l ik_foot_r下面有foot_r 在mixamo下面leftfoot对应ik_foot_l 但是foot_l 只能给他对应leftToeBase 了 image.pngspline 盆骨对应pelvis 在绑定控制中进行修改即可. image.png方法一 拷贝动画蓝图 [本人原创方法] 此方法毕竟操蛋,虽然完美兼容…

Linux驱动开发基础__休眠与唤醒

目录 1 适用场景 2 内核函数 2.1 休眠函数 2.2 唤醒函数 3 驱动框架 4 编程 4.1 gpio_key_drv.c 4.2 button_test.c 4.3 Makefile 1 适用场景 在前面引入中断时,我们曾经举过一个例子: 妈妈怎么知道卧室里小孩醒了? 休眠-唤醒&…

pytorch深度学习案例(一)——手写数学符号识别

文章目录前言简介数据集项目结构utils模块dataLoadermodelsplotShowtrain模块predict模块下载地址前言 在前面的两篇文章中我们介绍了现代计算机视觉中常见的结构化和非结构化的CNN模型,本篇我们将使用这些CNN模型在手写数学符号数据集上进行识别。 CNN模型的介绍请…