Day:006(2 ) | Python爬虫:高效数据抓取的编程技术(爬虫工具)

这篇具有很好参考价值的文章主要介绍了Day:006(2 ) | Python爬虫:高效数据抓取的编程技术(爬虫工具)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

selenium 层级定位

窗口的定位:

对于一个现代的web应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。

有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame中,seelnium webdriver提供了一个switch_to_frame方法,可以很轻松的来解决这个问题。

多层框架或窗口的定位:

  • driver.switch_to.frame()
frame.html 
<html>
<head>
    <meta http-equiv="content-type"
content="text/html;charset=utf-8" />
    <title>frame</title>
    <script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/jquery@1.1
2.4/dist/jquery.min.js"></script>
    <link href="http://netdna.bootstrapcdn.com/twitterbootstrap/2.3.2/css/bootstrapcombined.min.css"
rel="stylesheet" />
</head>

<body>
    <div class="row-fluid">
        <div class="span10 well">
            <h3>frame</h3><iframe id="f1"
src="inner.html" width="800" , height="600">
</iframe>
        </div>
    </div>
</body>
<script
src="https://cdn.jsdelivr.net/npm/@bootcss/v
3.bootcss.com@1.0.8/dist/js/bootstrap.min.js
"></script></html>
</html>

inner.html 
<html>
<head>
    <meta http-equiv="content-type"
content="text/html;charset=utf-8" />
    <title>inner</title>
</head>
<body>
    <div class="row-fluid">
        <div class="span6 well">
            <h3>inner</h3><iframe id="f2"
src="https://cn.bing.com/" width="700"
height="500"></iframe>
        </div>
    </div>
</body>
</html>
switch_to_frame()
from selenium.webdriver.chrome.service
import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
import os
from time import sleep

def select_frame():
    # 创建驱动
    s =
Service(executable_path='./chromedriver.exe')
    # 创建浏览器
    driver = webdriver.Chrome(service=s)
    file_path = 'file:///' +os.path.abspath('./html/outer.html')
    # 打开网页
    driver.get(file_path)
    # 切换frame
    driver.switch_to.frame('f1')
    driver.switch_to.frame('f2')
    # 定位元素,输入要搜索的内容
  
driver.find_element(By.ID,'sb_form_q').send_keys('百战')
    # 定位按钮,点击搜索
  
driver.find_element(By.ID,'search_icon').click()
    sleep(3)
    driver.quit()
if __name__ =='__main__':
    select_frame()

selenium 处理下拉框

        在爬取数据时,有时数据太多,而官网提供了筛选功能select标签,像这样的数据,我们只需要定位元素,点击即可。

<html>
    <body>
        <select id="ShippingMethod"
onchange="updateShipping(options[selectedIndex]);" name="ShippingMethod">
            <option value="12.51">UPS NextDay Air ==> $12.51</option>
            <option value="11.61">UPS NextDay Air Saver ==> $11.61</option>
            <option value="10.69">UPS 3 DaySelect ==> $10.69</option>
            <option value="9.03">UPS 2nd DayAir ==> $9.03</option>
            <option value="8.34">UPS Ground==> $8.34</option>
            <option value="9.25">USPSPriority Mail Insured ==> $9.25</option>
            <option value="7.45">USPSPriority Mail ==> $7.45</option>
            <option value="3.20"selected="">USPS First Class ==>$3.20</option>
        </select>
    </body>
</html>
from selenium.webdriver.common.by import By
driver= webdriver.Chrome()
file_path =  'file:///' +
os.path.abspath('drop_down.html')
driver.get(file_path)
time.sleep(2)
m=driver.find_element(By.ID,"ShippingMethod"
)
m.find_element(By.XPATH,"//option[@value='10
.69']").click()
time.sleep(3)
driver.quit()

selenium处理弹窗

        有时,页面可能要弹窗口。只需要去定位弹窗上的“确定”按钮即可

  • switch_to

                焦点集中到页面上的一个警告(提示)

  • accept()

                接受警告提示

切换至弹窗
chrome.switch_to.alert.accept()
chrome.switch_to_alert().accept()  # 过期

代码

html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>This is a page</title>
</head>
<body>
    <div id = "container">
    <div style="font: size30px;">Hello,Python Spider</div>
    </div>
</body>
<script>
    alert('这个是测试弹窗')
</script>
</html>

python

from lib2to3.pgen2 import driver
from selenium.webdriver.chrome.service
import Service
from selenium import webdriver
from time import sleep
import os

def test_windows():
    # 创建驱动对象
    s = Service('./chromedriver.exe')
    # 创建浏览器
    driver = webdriver.Chrome(service=s)
    # 访问页面
    # 设置页面地址
    file_path = 'file:///' +os.path.abspath('./html/test03.html')
    driver.get(file_path)
    sleep(3)
    # 定位弹出窗口,并点击
    driver.switch_to.alert.accept()
    sleep(3)
    driver.quit()

if __name__ =='__main__':
    test_windows()

 selenium拖拽元素

        要完成元素的拖拽,首先需要指定被拖动的元素和拖动目标元素,然后利用 ActionChains 类来实现,ActionChains用于定制动作。

通过ActionChains对象中的perform()执行动作

代码

html

<!doctype html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <meta name="viewport"content="width=device-width, initialscale=1">
 <title>jQuery UI Draggable - Autoscroll</title>
 <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jqueryui.css">
     <style>
    #draggable, #draggable2, #draggable3 {
width: 100px; 
height: 100px; 
padding: 0.5em;
float: left; 
margin: 0 10px 10px 0; 
}

    body {font-family: Arial, Helvetica,sans-serif;}
    table {font-size: 1em;}

    .ui-draggable, .ui-droppable{
background-position: top;
}
 </style>

 <script src="https://code.jquery.com/jquery1.12.4.js"></script>
 <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
 <script>
 $( function() {
 $( "#draggable" ).draggable({scroll: true });
 $( "#draggable2" ).draggable({scroll: true, scrollSensitivity: 100 });
 $( "#draggable3" ).draggable({scroll: true, scrollSpeed: 100 });
 } );
 </script>

</head>
<body>

<div id="draggable" class="ui-widgetcontent">
 <p>Scroll set to true, defaultsettings</p>
</div>

<div id="draggable2" class="ui-widgetcontent">
 <p>scrollSensitivity set to 100</p>
</div>

<div id="draggable3" class="ui-widgetcontent">
 <p>scrollSpeed set to 100</p>
</div>
<div style="height: 5000px; width: 1px;">
</div>
</body>
</html>

python 文章来源地址https://www.toymoban.com/news/detail-848758.html

import os
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains

chrome =webdriver.Chrome(executable_path='./tools/chromedriver.exe')
file =f'file:///{os.path.abspath("./html/scroll.html")}'
chrome.get(file)

div1 =chrome.find_element_by_id('draggable')
div2 =chrome.find_element_by_id('draggable2')
div3 =chrome.find_element_by_id('draggable3')
print(div1)
print(div2)
print(div3)
sleep(2)

ac1 =ActionChains(chrome).drag_and_drop(div1,div2)
ac1.perform()
sleep(2)

ac2 =ActionChains(chrome).drag_and_drop_by_offset(div3,10,10)
for i in range(5):
    ac2.perform()
    sleep(1)

sleep(3)
chrome.quit()

到了这里,关于Day:006(2 ) | Python爬虫:高效数据抓取的编程技术(爬虫工具)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python网络爬虫-WebSocket数据抓取

    目录 前言 1、WebSocket请求的分析通常涉及以下几个方面: 2、利用WebSocket爬取数据 总结 最后,创作不易!非常感谢大家的关注、点赞、评论啦!谢谢三连哦!好人好运连连,学习进步!工作顺利哦!  博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作

    2024年04月27日
    浏览(28)
  • 【爬虫实践】使用Python从网站抓取数据

            本周我不得不为客户抓取一个网站。我意识到我做得如此自然和迅速,分享它会很有用,这样你也可以掌握这门艺术。 【免责声明:本文展示了我的抓取做法,如果您有更多相关做法请在评论中分享】 确定您的目标:一个简单的 html 网站 在 Python 中设计抓取方案

    2024年02月14日
    浏览(32)
  • 如何使用 Python 爬虫抓取动态网页数据

    随着 Web 技术的不断发展,越来越多的网站采用了动态网页技术,这使得传统的静态网页爬虫变得无能为力。本文将介绍如何使用 Python 爬虫抓取动态网页数据,包括分析动态网页、模拟用户行为、使用 Selenium 等技术。 在进行动态网页爬取之前,我们需要先了解动态网页和静

    2023年04月24日
    浏览(48)
  • Python爬虫框架之快速抓取互联网数据详解

    Python爬虫框架是一个能够帮助我们快速抓取互联网数据的工具。在互联网时代,信息爆炸式增长,人们越来越需要一种快速获取信息的方式。而Python爬虫框架就能够帮助我们完成这个任务,它可以帮助我们快速地从互联网上抓取各种数据,例如文本、图片、音频、视频等。

    2024年02月10日
    浏览(31)
  • Python爬虫抓取经过JS加密的API数据的实现步骤

    随着互联网的快速发展,越来越多的网站和应用程序提供了API接口,方便开发者获取数据。然而,为了保护数据的安全性和防止漏洞,一些API接口采用了JS加密技术这种加密技术使得数据在传输过程中更加安全,但也给爬虫开发带来了一定的难度。。 在面对经过JS加密的API数

    2024年02月10日
    浏览(37)
  • 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,**本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程。**如果你还在入门爬虫阶段或者不清楚爬虫的具体工作流程,那么应该仔细阅读本文! 第一步:

    2024年02月04日
    浏览(47)
  • 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

    链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwd=abc1  利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28 这是网上的数据,怎么将它爬取下来 它将只爬取最近30期的双色球开奖号码,并将结果写入到名为 \\\"双色球开奖结果.csv\\\" 的文件中。   生成

    2024年02月15日
    浏览(124)
  • 小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)

    jS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了        如果不加,如果网站有防爬技术,比如频繁访问,后面你会发现什么数据都取不到 User-Agent获取地方:  网页获取位置: 使用代理IP解决反爬。(免费代理

    2024年02月01日
    浏览(72)
  • Python抓取抖音直播间数据:技术探索与实践

    目录 一、引言 二、技术准备 三、分析抖音直播间网页结构 四、编写爬虫代码 五、处理反爬虫机制 六、数据清洗与存储 七、总结 随着互联网的快速发展,直播行业已成为当下的热门领域。抖音作为其中的佼佼者,吸引了大量的用户和主播。对于数据分析师、市场研究人员

    2024年04月15日
    浏览(39)
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中,为了应对反爬虫、匿名访问或绕过某些地域限制等需求,IP代理池成为了一种常用的解决方案。IP代理池是一个包含多个可用代理IP地址的集合,可以通过该代理池随机选择可用IP地址来进行网络请求。 IP代理池是一组可用的代理IP地址,可以用来隐藏用户的

    2024年01月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包