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

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

 

 selenium调用js方法

        有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作。

一般用到操作滚动条的会两个场景:

  1. 要操作的页面元素不在当前页面范围,无法进行操作,需要拖动滚动条
  2. 注册时的法律条文需要阅读,判断用户是否阅读的标准是:滚动条是否拉到最下方
调用js的方法 :
execute_script(script, *args)
滚动条回到顶部: 
js="document.getElementById('id').scrollTop=0"
driver.execute_script(js)
滚动条拉到底部:
js="document.documentElement.scrollTop=10000"
driver.execute_script(js)

        可以修改scrollTop 的值,来定位右侧滚动条的位置,0是最上面,10000是最底部

        以上方法在Firefox和IE浏览器上上是可以的,但是用Chrome浏览器,发现不管用。Chrome浏览器解决办法: 

js = "document.body.scrollTop=0"
driver.execute_script(js)
横向滚动条:
js = "window.scrollTo(100,400)"
driver.execute_script(js)

代码

from selenium.webdriver.chrome.service
import Service
from selenium import webdriver
from time import sleep
from lxml import etree

def test_scroll():
    # 创建驱动
    s = Service('./chromedriver.exe')
    # 创建浏览器
    driver = webdriver.Chrome(service=s)
    # 访问页面
driver.get("https://search.jd.com/Search?
keyword=%E6%89%8B%E6%9C%BA&enc=utf8&suggest=1.def.0.SAK7|MIXTAG_SAK7R,SAK7_M_A
M_L5385,SAK7_M_COL_R,SAK7_S_AM_R,SAK7_SC_PD_
R,SAK7_SM_PB_R,SAK7_SS_PM_R,tsabtest_base64_
U2VhcmNobGlzdF80MzkyfGJhc2U_tsabtest|&wq=sho
uji&pvid=24340a2def0e4e0cb510af07aa32c89d")

# 拉动滚动条到底部
    js='document.documentElement.scrollTop=100000'
    driver.execute_script(js)
    sleep(1)
    # 创建一个etree对象,用于解析数据
    e = etree.HTML(driver.page_source)
    # 获取数据价格
    prices = e.xpath('//ul[@class="gl-warpclearfix"]/li/div/div/strong/i/text()')
    print(prices)
    print(len(prices))
    # 关闭浏览器
    sleep(3)
    driver.quit()

if __name__ =='__main__':
    test_scroll()

selenium 等待元素

  • 网速慢
  • AJAX请求数据
  • 调试
强制等待 

使用 time.sleep

作用:当代码运行到强制等待这一行的时候,无论出于什么原因,都强制等待指定的时间,需要通过time模块实现

优点:简单

缺点:无法做有效的判断,会浪费时间 

隐式等待

chrome.implicitly_wait(time_num)



到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行

优点: 设置一次即可

缺点:必须等待加载完成才能到后续的操作,或者等待超时才能进入后续的操作 

from selenium import webdriver
url = 'https://www.baidu.com/'
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(10)
print(driver.find_element_by_class_name('next'))
print(driver.page_source)
显示等待

from selenium.webdriver.support.wait import WebDriverWait



指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回

优点:专门用于对指定一个元素等待,加载完即可运行后续代码

缺点:多个元素都需要要单独设置等待 

url = 'https://www.guazi.com/nj/buy/'
driver = webdriver.Chrome()
driver.get(url)
wait = WebDriverWait(driver,10,0.5)
wait.until(EC.presence_of_element_located((By
.CLASS_NAME, 'next')))
print(driver.page_source)

selenium 参数使用

chrome59版本以后可以变成无头的浏览器,加以下参数

def test_headless():
    # 设置参数,将浏览器隐藏起来(无头浏览器)
    options = ChromeOptions()
    options.add_argument('--headless')
    # 设置驱动
service = Service('./chromedriver')
    # 启动Chrome浏览器
    driver =Chrome(service=service,options=options)
    # 访问页面
    driver.get('https://www.baidu.com')
    # 打印代码
    print(driver.page_source)
    # 关闭浏览器
    driver.quit()
 代理模式
def test_proxy1():
    # 设置参数,给浏览器设置代理
    options = ChromeOptions()
    # options.add_argument('--proxyserver=http://ip:port')
    options.add_argument('--proxyserver=http://221.199.36.122:35414')
    # 设置驱动
    service = Service('./chromedriver')
    # 启动Chrome浏览器
    driver =Chrome(service=service,options=options)
    # 访问页面 "134.195.101.16",
    driver.get('http://httpbin.org/get')
    # 打印代码
    print(driver.page_source)
    # 关闭浏览器
    driver.quit()

def test_proxy2():
    from selenium.webdriver.common.proxy
import ProxyType,Proxy
    # 设置参数,给浏览器设置代理
    ip = 'http://113.76.133.238:35680'
    proxy = Proxy()
    proxy.proxy_type = ProxyType.MANUAL
    proxy.http_proxy = ip
    proxy.ssl_proxy = ip
    # 关联浏览器
    capabilities =DesiredCapabilities.CHROME
    proxy.add_to_capabilities(capabilities)
    # 设置驱动
    service = Service('./chromedriver')
    # 启动Chrome浏览器
    driver =Chrome(service=service,desired_capabilities=capabilities)
    # 访问页面 "134.195.101.16",
    driver.get('http://httpbin.org/get')
    # 打印代码
    print(driver.page_source)
    # 关闭浏览器
    driver.quit()
 防检测设置

 

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomati
onExtension', False)

chrome = Chrome(chrome_options=options)

chrome.execute_cdp_cmd("Page.addScriptToEval
uateOnNewDocument", {
    "source": """
       Object.defineProperty(navigator,
'webdriver', {
       get: () => false
       })
   """
})

chrome.get('http://httpbin.org/get')
info = chrome.page_source

print(info)
sleep(20)

使用 window.navigator.webdriver 检测 文章来源地址https://www.toymoban.com/news/detail-853800.html

Selenium实战案例 

from selenium.webdriver.chrome.service
import Service
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By

from lxml import etree

def spider_huya():
    # 创建一个驱动
    service = Service('./chromedriver.exe')
    # 创建一个浏览器
    driver = Chrome(service=service)
    # 设置隐式等待
    driver.implicitly_wait(5)
    # 访问网址
    driver.get('https://www.huya.com/g/lol')
    count = 1
    while True:
        # print('获取了第%d页' % count)
        # count += 1
        # 提取数据
        e = etree.HTML(driver.page_source)
        names =e.xpath('//i[@class="nick"]/@title')
        person_nums =e.xpath('//i[@class="js-num"]/text()')
        # 打印数据
        # for n,p in zip(names,person_nums):
        #     print(f'主播名:{n} 人气:{p}')
        # 找到下一页的按钮
        # try:
        #     next_btn =driver.find_element(By.XPATH,'//a[@class="laypage_next"]')
        #     next_btn.click()
        # except Exception as e:
        #     break
        if
driver.page_source.find('laypage_next') ==-1:
            break
        next_btn =driver.find_element(By.XPATH,'//a[@class="laypage_next"]')
        next_btn.click()
        
    # 关闭浏览器
    driver.quit()

if __name__ == '__main__':
    spider_huya()

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

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

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

相关文章

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

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

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

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

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

    【爬虫实践】使用Python从网站抓取数据

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

    2024年02月14日
    浏览(9)
  • Python爬虫框架之快速抓取互联网数据详解

    Python爬虫框架之快速抓取互联网数据详解

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

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

    Python爬虫抓取经过JS加密的API数据的实现步骤

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

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

    『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

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

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

    【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

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

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

    小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)

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

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

    Python抓取抖音直播间数据:技术探索与实践

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

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

    Python爬虫实战:IP代理池助你突破限制,高效采集数据

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

    2024年01月21日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包