首页 > 编程语言 >Python Selenium+cookie+XPATH爬取数据

Python Selenium+cookie+XPATH爬取数据

时间:2024-07-10 21:07:50浏览次数:12  
标签:XPATH xxx name Python 元素 Selenium value cookie time

以某科研基金信息平台为例,写了一个基于selenium的web自动化爬虫。不带验证码防反爬以及代理ip池,是最基础的自动化工具爬虫。

一、首先,此平台需要登录后才能正常访问,否则数据不全,因此需要登录后获取cookie,以便selenium能够以登录状态运行

1.F12打开开发者工具,找到network(网络),在登录后其有一个刷新的请求

 可以看到该网站仅刷新了这一个请求

2.点击“cookie”选项卡,进入cookie截面(其实selenium自带了自动保存cookie的方法,但我希望尝试一下手动输入的流程)

 3.可以看到cookie的信息分为“name”和“value”两部分,为了让cookie能够注入selenium,需要将其全部整理为[{'name':'xxx','value':'xxx'}]的形式,如下:

 这便是一个完整的手动版cookie格式

 

二、在获取到cookie之后,第二步是需要分析页面找规律,找出我需要获取的信息

1.依旧是打开开发者工具,点开“元素”选项卡,可以看到整个网页的元素结构。将光标放到元素上,页面上就会显示该元素内具体包含了什么

经过查找,发现我需要的内容被包含在一个大元素中,下面分多个子元素,子元素下面又分多个子元素,

 

 

 

 

 虽然关系很复杂,但是实际上,我们可以发现,我们需要的内容的class是一致的,

我需要的内容可以被这样找到:

父元素→遍历其中的子元素→找到子元素中特定class的元素

有了这样的逻辑,我就可以轻松地在代码中定位我需要的数据

为了实际定位,我使用XPATH作为定位的方法

例如我想先找到父元素,也就是<div class="home-content-container">

其XPATH即可以被写为 './/div[@class="home-content-container"]' 即可与find_element配合来获取此元素

 

三、在以上两步都完成后,我就可以开始编写代码来获取我需要的数据

# coding:utf-8
import time
import random
from time import sleep
from csv import writer
from selenium import webdriver
from selenium.webdriver.common.by import By

#初始化webdriver实例
driver = webdriver.Chrome()



#定义函数
def get_information(search_name):
#打开某名字下的网站
    driver.get("https://www.xxxxx.cn/pro/sonE-stwE08?psnname={}".format(search_name))
    time.sleep(6)

#手动添加cookie
    cookies = [{'name': 'HMACCOUNT', 'value': 'xxx'},
    {'name': 'Hm_lpvt_0449d831efe3131221f6d2f2b6c91897', 'value': 'xxx'},
    {'name': 'Hm_lvt_0449d831efe3131221f6d2f2b6c91897', 'value': 'xxx'},
    {'name': '_c_WBKFRo', 'value': 'xxx'},
    {'name': '_nb_ioWEgULi', 'value': ''},
    {'name': 'acw_tc', 'value': 'xxx'},
    {'name': 'counter', 'value': 'xxx'},
    {'name': 'gzr_session', 'value': 'xxx'},
    {'name': 'userId', 'value': 'xxx'},
    {'name': 'uuid', 'value': 'xxx'},
    ] 

#加载cookie模拟登陆
    for cookie in cookies:
        driver.add_cookie(cookie)
    time.sleep(5)
    driver.refresh()
    time.sleep(random.randrange(5,10))

#定位需要爬取的元素(这里我进一步简化了定位的路径,请见谅)
    #获取我需要的主元素,由于有好几个,所以使用find_elements
    parent_element=driver.find_elements(By.XPATH,'.//div[@class="item-box layui-card "]')
    #遍历每一个主元素
    for child_element in parent_element:
        #主元素中的数据元素,也是有多个
        text_element=child_element.find_elements(By.XPATH,'.//div[@class="layui-col-xs4"]')


        info=''
        #对于每个数据元素,使用.text取出数据
        for n in text_element:
            info+=n.text
            info+=','
        print(info)

        #储存到csv里
        list_data=[name,info]
        with open("信息.csv", "a", newline="") as f_object:
            writer_object = writer(f_object)
            writer_object.writerow(list_data)
        time.sleep(5)
    


list_name=[xxxxx]
#主程序
for name in list_name:
    get_information(name)
    time.sleep(random.randrange(10,30))

 

标签:XPATH,xxx,name,Python,元素,Selenium,value,cookie,time
From: https://www.cnblogs.com/Vicrooor/p/18295004

相关文章

  • Python中的元组:为什么它们比列表更快?
    引言        在Python编程语言中,数据结构是存储和组织数据的强大工具。Python提供了多种内置数据结构,如列表(List)、字典(Dictionary)、集合(Set)等。元组(Tuple)是其中一种非常重要的数据结构,它因其独特的特性和用途,在Python编程中占有一席之地。一、元组的定义     ......
  • 利用Selenium和PhantomJS绕过接口加密的技术探索与实践
    selenium+phantomjs绕过接口加密我们为什么需要selenium之前我们讲解了Ajax的分析方法,利用Ajax接口我们可以非常方便地完成数据的爬取。只要我们能找到Ajax接口的规律,就可以通过某些参数构造出对应的的请求,数据自然就能被轻松爬取到。但是,在很多情况下,Ajax请求的接口通......
  • 【每日一练】python文件读.写.追加基本用法
    """本节课程内容:1.打开一个文件,模式为写入2.用传参方式写入文件内容3.如何追加文件内容4.如何读取新写入的文件5.牢记操作完一定要关闭程序使用close()函数Ps:如果写完文件后就读取文件,需要使用seek(0)把指针复位到开头。否则,下面读取文件为空,因为写完后指针会停留在尾......
  • python+flask计算机毕业设计小型社区疫情期间应急线上管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球疫情的持续蔓延,小型社区作为社会的基本单元,其疫情防控能力直接关系到居民的生命安全与社会的稳定。疫情期间,传统的管理方式面临诸......
  • TIOBE 7月编程排行榜出炉!Python再次出圈
    又到了周三,本周有过半了,大家好呀~~每月的TIOBE编程排行榜都是技术社区关注的焦点,作为编程语言流行度的晴雨表,它反映了行业趋势和技术走向。2024年7月的榜单揭晓了一个重要变化:Python再次登上榜首,成为最受欢迎的编程语言。这个消息对于开发者和企业来说,都具有非凡的意义。 ......
  • Python TensorFlow Keras深度学习模型RetinaNet进行目标检测分析车牌数据
    全文链接:https://tecdat.cn/?p=36968原文出处:拓端数据部落公众号目标检测作为计算机视觉领域的关键任务之一,在交通管理、智能安防、自动驾驶等众多应用场景中具有重要意义。车牌作为车辆的重要标识,其准确检测对于车辆识别、交通监控等系统的性能提升至关重要。传统的目标检测方......
  • 量化交易入门:如何在QMT中配置Python环境,安装第三方依赖包
    哈喽,大家好,我是木头左!引言QMT,作为量化交易系统中的佼佼者,以其强大的功能和灵活的操作性,受到了广大投资者的青睐。但是,对于很多新手来说,如何在QMT中配置Python环境,安装第三方依赖包,却是一个让人头疼的问题。本文将从零开始,手把手教你如何在QMT中配置Python环境,安装第三方依赖包......
  • Python 爬虫与 Java 爬虫:相似之处、不同之处和选项
    在信息时代,网络上可用的数据量巨大且不断增长。为了从这些数据中提取有用的信息,爬虫已成为一种重要的技术。Python和Java都是流行的编程语言,都具有强大的爬虫功能。本文将深入探讨Python爬虫和Java爬虫之间的差异,以帮助您在选择适合您需求的语言时做出明智的决定。一......
  • python+flask计算机毕业设计基于B_S的江理工党员信息管理系统设计与实现(程序+开题+论
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和高校党建工作的日益深入,传统的党员信息管理模式已难以满足当前高效、精准、便捷的管理需求。江苏理工学院(简称江......
  • python基础(06while循环+for循环)
    一、循环循环的概念循环语句是一种在程序中多次执行相同代码块的语句。循环的分类在python中,循环分为while和for两种,while循环是一种在满足条件的情况下重复执行代码块的循环,最终实现的效果和for循环相同。总结while循环和for循环本质上没有区别,都是为了实现循环效果w......