Selenium 模拟浏览器 爬虫 禁止加载图片 和 css

30分钟上手Python爬虫:Selenium+Requests实战图片抓取 网络爬虫是一种自动化获取网页数据的技术,其核心原理是模拟浏览器行为或直接发送HTTP请求来提取目标信息。在Python生态中,Requests库用于高效处理HTTP请求,而Selenium则能驱动真实浏览器执行JavaScript,解决动态加载页面的数据抓取难题。这种技术组合在数据采集、内容聚合等场景中具有重要价值,尤其适用于图片、商品信息等资源的批量获取。本文以Unsplash图片网站为例,通过Selenium模拟滚动、定位元素,结合Requests下载和Pillow保存,演示了从动态网页中自动化抓取图片 阅读详情

在爬取某网站的评论时 ,评论和一些是ajax请求的,而且不是很好找,因为有个eleven(想知道的百度"eleven参数")参数很难搞(之前搞出过一次)。

 

  • 用Selenium只要有下面(目前技术也只能用这个)
  1. 因为评论是ajax请求后再添加到页面的,就是在客户端上渲染的,如果之前使用requests的get获取到的只能是渲染前的,没有评论数据
  2. Selenium get 后可以 用 page_source 来获取源码,这里的page_source是js在本地渲染完后的,可以直接获取后用xpath解析

 

 

 

  • 缺点:

  1. 速度不快(网站有验证,爬太快反而被封)

 

 

 

  • Selenium 坑总结

  1. 浏览器设置无头模式(headless)
  2. 设置浏览器不加载图片,不加载css(提高速度
  3. 设置页面加载和脚本执行的超时时间

 

 

爬虫代码,加载浏览器部分

 #加载浏览器
    def loadDriver(self):

        option = webdriver.FirefoxOptions()
        #无头模式
        option.add_argument("-headless")
        #禁止加载图片
        option.set_preference('permissions.default.image', 2)
        #禁止加载css样式表
        option.set_preference('permissions.default.stylesheet',2)
        self.firefox = webdriver.Firefox(options=option)
        #设置页面加载超时,超过这个时间就会抛出异常,执行之后的代码,不然会卡在>一直加载
        self.firefox.set_page_load_timeout(5)
        self.firefox.set_script_timeout(5)
        try:
            #超时会抛出异常,这里try一下
            self.firefox.get("https://hotels.ctrip.com/hotel/479628.html")
        except Exception as e:
            pass

这里的 permissions.default.image 参数是 可以在火狐浏览器的config里找到的,但这个是没找到的permissions.default.stylesheet

 

代码里的citys.txt和对应的hotel_id.txt,是之前爬的, 这些都可以直接爬,没有什么反爬 (city是爬取移动版网页时候的)

爬虫代码

from selenium import webdriver
import os
import json
import time
import json
from lxml import etree



#http://hotels.ctrip.com/hotel/dianping/374783_p3t1.html



#评论爬取
class xc_comment:
    def __init__(self):
        pass

    def savestring(self,path,data):
        with open(path,"w",encoding="UTF-8") as fp:
            fp.write(data)

    #加载酒店数据,每行为一个json
    def loadhotel(self):
        hotels = {}
        with open(self.hotelfile,"r") as fp:
            for line in fp:
                items = json.loads(line)
                for item in items:
                    hotels[item['id']]= {"name":item["name"],
                                         "id":item["id"],
                                         "city_name":self.cityname,
                                         "star":item["star"],
                                         }
        return hotels

    #加载城市
    def loadCitys(self):
        citys = {}
        with open("citys.txt","r") as f:

            for line in f:

                line=line.split(",")

                citys[line[0].strip()]=line[1].strip()
        return citys

    #加载浏览器
    def loadDriver(self):

        option = webdriver.FirefoxOptions()
        #无头模式
        option.add_argument("-headless")
        #禁止加载图片
        option.set_preference('permissions.default.image', 2)
        #禁止加载css样式表
        option.set_preference('permissions.default.stylesheet',2)
        self.firefox = webdriver.Firefox(options=option)
        #设置页面加载超时,超过这个时间就会抛出异常,执行之后的代码,不然会卡在一直加载
        self.firefox.set_page_load_timeout(5)
        self.firefox.set_script_timeout(5)
        try:

            self.firefox.get("https://hotels.ctrip.com/hotel/479628.html")
        except Exception as e:
            pass





    def parseInfo(self,strw):

        allcomments = []
        #lxml解析
        elements = etree.HTML(strw)

        comments = []


        print(type(comments))

        e_cmt_check_in_dates = elements.xpath("//span[@class='date']/text()")
        e_cmt_devices = elements.xpath("//p[@class='comment_bar_info']/i/@class")
        e_cmt_causes = elements.xpath("//span[@class='type']/text()")
        e_comments = elements.xpath("//div[@class='J_commentDetail']/text()")
        e_cmt_room_types = elements.xpath("//a[contains(@class,'room') and contains(@class,'J_baseroom_link')]/text()")

        # basides recommend
        e_prices = elements.xpath("//tr[@class!='tr-recommend last_room']/td/div/span[@class='base_price']/text()")




        prices = []

        for price in e_prices:
            prices.append({"LowPrice": price, "RoomTotalNum": 1})

        for cmt_check_in_date, cmt_device, cmt_cause, comment, cmt_room_type in zip(e_cmt_check_in_dates, e_cmt_devices,
                                                                                    e_cmt_causes, e_comments,
                                                                        e_cmt_room_types):
            result = {}


            result["cmt_check_in_date"] = cmt_check_in_date
            result["cmt_device"] = cmt_device
            result["cmt_cause"] = cmt_cause
            result["comment"] = comment
            result["cmt_room_type"] = cmt_room_type

            result["price"] = prices
            allcomments.append(result)



        return allcomments

    def getcomment(self,hotel):
        
        #酒店的url,这样只会爬取第一页的评论
        url='http://hotels.ctrip.com/hotel/dianping/{}_p0t1.html'.format(hotel["id"])
        outpath = os.path.join(self.outdir,hotel["id"] + ".txt")
        print("outpath:",outpath)

        if os.path.exists(outpath) and os.path.getsize(outpath)!=0:
            print("skip :",outpath)
            return
        file = open(outpath,"w")
        time.sleep(3)
        try:
            self.firefox.get(url)
        except Exception as e:
            pass


        #获取网页源码e
        strw = self.firefox.page_source
        self.savestring("html/{}.html".format(hotel["id"]),strw)
        comments  = self.parseInfo(strw)
        print("comment len:",len(comments))
        for comment in comments:
            #字典合并,调用后会直接修改comment
            comment.update(hotel)
            self.savedata(file,comment)


    def savedata(self,file,item):


        print("save:",item)

        strw = json.dumps(item,ensure_ascii=False)
        file.write(strw)
        file.write("\n")


        pass
    def craw(self):


        hotels = self.loadhotel()



        print("酒店数量:",len(hotels))

        for key,value in hotels.items():

            self.getcomment(value)




        pass
    def start(self):

        self.loadDriver()

        citys = self.loadCitys()
        craw_citys = ["北京","南宁",'广州']
        for city in craw_citys:

            print("开始爬取城市:",str(citys[city]))
            self.hotelfile = "hotel/hotel_{}.txt".format(citys[city])
            self.cityname = city
            # 设置输出文件
            self.outdir=self.cityname
            if not  os.path.exists(self.outdir):
                print("建立输出文件夹")
                os.mkdir(self.outdir)
            self.craw()


xc = xc_comment()

xc.start()

 

Selenium爬虫实战:破解动态加载页面数据抓取难题 在Web数据抓取领域,动态加载技术已成为常见挑战,它通过JavaScript异步请求数据,使得传统基于HTTP请求的爬虫难以获取完整内容。其核心原理在于现代单页应用(SPA)采用前后端分离架构,初始HTML仅为空壳,真实数据需JS执行后填充。为应对此问题,Selenium等浏览器自动化工具展现出重要技术价值,它们通过驱动真实浏览器、完整执行JavaScript并渲染DOM,能够获取与用户所见一致的最终页面内容。在电商价格监控、社交媒体动态采集及登录后数据获取等应用场景中,Selenium通过模拟点击、输入、 阅读详情

相关推荐

抓取网站图片如何破解网页反爬虫

1. User-Agent检测:修改请求头中的User-Agent字段,将其设置为浏览器的标准User-Agent,或者设置为网站允许的User-Agent,避免被识别为爬虫。4. 图片防盗链:可以在请求头中设置Referer字段,将来源设置为网站本身,从而绕过防盗链的限制。以上是常见的几种反爬虫技术,但并不是所有的网站都会使用这些技术,实际情况需要具体分析。综上所述,我们可以通过代码解决网站反爬虫技术的限制,但是需要注意,一定要遵守法律法规和网站的规则,不得进行非法的数据获取和使用行为。

sfjsffjjj的博客 3200

谷歌selenium 设置禁止css和图片加载,加速访问速度

有些网站用selenium 访问, 经常进入页面后一直转圈,此时可以考虑 通过禁止css及图片的加载来加快访问速速(前提是不用额外的点击, 否则禁止css有可能会导致无法正常点击元素)

姜枨文的技术博客 2587

Selenium无头浏览器爬虫实战:从PhantomJS到动态页面数据抓取

网络爬虫技术是数据采集领域的基础,其核心原理在于模拟浏览器行为获取网页数据。传统HTTP请求库如requests难以处理JavaScript动态渲染的内容,这时需要借助浏览器自动化工具。Selenium作为主流的浏览器自动化框架,通过WebDriver协议与浏览器内核交互,能够完整执行页面JavaScript、渲染DOM并获取动态加载的内容。这项技术的工程价值在于解决了单页应用(SPA)、无限滚动等现代Web技术带来的数据抓取难题,广泛应用于电商监控、社交媒体分析和需要登录验证的场景。本文以经典的Selen

weixin_33894640的博客 420

java Selnium 禁用css 图片

在 Java Selenium 中禁用 CSS 图片可以使用 ChromeOptions 类来实现。 示例代码如下: import org.openqa.selenium.chrome.ChromeOptions; ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-extensions"); ...

weixin_35756130的博客 385

西北乱跑娃 --- selenium设置不加载css、javascript和图片以及xpath

Chrome 的限制图片、javascript和css from selenium import webdriver from selenium.webdriver.chrome.options import Options options = webdriver.ChromeOptions() prefs = { 'profile.default_content_settin...

西北乱跑娃的博客 7193

速卖通商品信息爬虫实战:完整源码解析

网络爬虫是一种自动化提取网页内容的程序,通常用于搜索引擎索引、数据分析、监测和备份网站数据等用途。它模拟浏览器行为,通过网络协议从互联网上获取数据,然后进行进一步的分析和处理。网络爬虫的技术实现有不同层次,基础的可以通过简单的脚本实现,而复杂的爬虫则涉及大量的数据处理和存储工作。Selenium是一个用于Web应用程序测试的工具。它能够模拟用户操作浏览器,执行自动化任务,如数据抓取、界面验证、功能测试等。

weixin_32661831的博客 2446

禁止selenium抓取css

douyunqian668的博客 695

在MDK5.37版本中添加Complier Version 5( 解决Missing Compiler Version 5 )

本文章仅作为个人学习记录,方法也是从其他博主的博客中得到的,链接如下:二、Keil——Missing Compiler Version 5 和 core_cm3.c 问题解决 - YI颗白菜 - 博客园 (cnblogs.com) 问题描述 更新最新的keil版本(MDK5.37)后,在编译以前版本的工程文件时,发现出现了非常多的报错,在网上搜索之后发现原来时编译器版本不匹配的问题,即MDK5.37中使用的是Version 6版本的编译器,而缺少Version 5,对于以前编写的工

leveling99的博客 1万+

selenium优化禁止图片和css加载

在使用 selenium 模拟抓取网页的时候,速度效率其实是非常慢的,可以稍微优化一下,禁止不必要的图片加载和css加载,示例代码如下: from selenium import webdriver from selenium.webdriver.chrome.options import Options import time import random options = Options...

全国10大躺平艺术家之一,世界10大懒人之二,宇宙百百万亿尘埃之一 2万+

【通过STM32CubeMx配置LWIP+FreeRTOS并通过Socket实现TCP_Client/Sever】

生成KEIL工程之后,勾选上use MicroLIB,代码上暂时无需做其他修改,编译下载。由于使用了FreeRTOS,因此系统的TimeBase Source修改成TIM1。在CubeMx上面选择NUCLEO-F429ZI开发板,并采用默认配置。打开电脑命令行,去ping这设置好的IP,能够实现Ping通。使能LWIP,并且先禁用DHCP,设置好静态IP。修改defaultTask的栈大小。Platform选择LAN8742。修改堆栈大小,生成工程。使能FreeRTOS。

qq_42617357的博客 6111

基于大模型的癫痫手术预测与决策系统技术方案文档

基于大模型的癫痫手术预测与决策系统技术方案文档

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 977

html 设置不允许爬虫,Selenium 模拟浏览器 爬虫 禁止加载图片 和 css

在爬取某网站的评论时 ,评论和一些是ajax请求的,并且不是很好找,由于有个eleven(想知道的百度"eleven参数")参数很难搞(以前搞出过一次)。css用Selenium只要有下面(目前技术也只能用这个)由于评论是ajax请求后再添加到页面的,就是在客户端上渲染的,若是以前使用requests的get获取到的只能是渲染前的,没有评论数据Selenium get 后能够 用 page_sou...

weixin_39926678的博客 1249

华为eNSP与VMware虚拟机联动实战:从零搭建仿真网络环境

本文详细介绍了如何从零开始搭建华为eNSP与VMware虚拟机的联动仿真网络环境。通过环境准备、网络适配器配置、eNSP与VMware网络集成、安全策略与NAT配置等步骤,帮助读者掌握构建企业级网络实验场景的关键技术。这种组合特别适合网络工程师进阶训练和华为认证考试准备,实现低成本、高灵活性的网络仿真实验。

weixin_30415113的博客 504

网络爬虫requests+selenium总结

导入所需要的模块 import time from selenium.webdriver.chrome.options import Options from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by impo...

u013289615的博客 2824

图解电动汽车:电动汽车主要参数

动力性指标 汽车的动力性指标主要有最高车速、加速时间、最大爬坡等,体现了汽车在行驶过程中能达到的极限运动水平。对于电动汽车,其动力性由搭载的驱动电动机决定,主要的参数包括最大扭矩、额定功率、最大功率、最大转速等。 功率是指物体在单位时间内所做的功的多少,是描述做功快慢的物理量,单位是 kW。 扭矩是指机械元件转动的力矩,也称转矩,表示转动力量的大小,单位是 N·m。 转速是指发动机/电动机的转速,的单位是 rpm,即转每分钟。额定转速是指在额定功率下电动机的转速,最大转速则是在最大功率下电动机的转速。

程序员「阿基米东」的编程之旅 2万+

YOLOv11改进缝合FasterBlock | 一种新型轻量化卷积结构C3k2的设计与实证:兼顾精度与速度的改进方法(附代码)

YOLO系列一直是目标检测领域的明星算法,凭借其实时性和准确性在众多应用中占据一席之地。随着YOLO版本的不断迭代,网络架构逐渐变得更为复杂,尤其是在卷积模块的设计上。本文将介绍如何利用FasterNet的FasterBlock创新,并通过二次创新C3k2提出一种全新的卷积结构。该结构旨在提高YOLOv11的计算效率和准确性,特别是在视觉任务中的表现。我们的创新在保证高精度的前提下,有效降低了计算量和内存需求,特别适合在资源受限的设备上运行。

一键难忘的博客 906

JAVA 【爬虫】Selenium—自动化测试工具

JAVA爬虫 selenium自动化测试JAVA爬虫 selenium自动化测试的学习记录!为什么用—Selenium初识-selenium使用selenium遇到的问题,和解决方法 JAVA爬虫 selenium自动化测试的学习记录! 因为最近新型冠状病毒的事件,在家闲的发慌,加上一直对爬虫有独特的喜爱,所以我打算开始我的java爬虫学习之路。(本人大一,有什么说错的请大家纠正!) 为什么用—S...

言小溪 的博客 2497

Flink 运维监控与指标采集实战(Prometheus + Grafana 全流程)

Flink运维监控在实时计算场景中至关重要,因为Flink作业需要7×24小时稳定运行,对性能、资源、故障感知和状态变化的实时监控是保障系统稳定的关键。Flink自带的Metrics系统提供了基本的监控能力,但为了更全面的监控,Prometheus+Grafana成为最主流的解决方案。通过配置PrometheusReporter和Grafana仪表盘,可以实现对Flink作业的全面监控,包括CPU、内存、吞吐量、Checkpoint状态、KafkaSink性能等关键指标。此外,自定义指标采集和报警机制的配置

晴天彩虹雨的博客 1368

Python网络爬虫核心原理与实战技巧

网络爬虫作为数据采集的核心技术,通过模拟浏览器行为自动获取网页数据。其工作原理基于HTTP协议通信,涉及请求发送、响应解析等关键环节,广泛应用于舆情监控、价格比对等场景。Python生态提供了Scrapy框架等高效工具,结合Requests库可快速实现静态页面抓取,而Selenium则能处理JavaScript动态渲染难题。在反爬策略方面,需要掌握User-Agent伪装、IP代理池搭建等实用技巧,其中Scrapy的中间件机制和MongoDB存储方案能有效提升工程效率。通过招聘网站数据采集等实战案例,开发者

ciqiaofu0192的博客 450

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:永磁同步电机(PMSM) PID转速控制仿真

*永磁同步电机(PMSM)因其高效、高功率密度和良好的动态响应特性,在现代工业自动化、电动汽车驱动系统等领域得到了广泛应用。为了实现对PMSM的速度精确控制,通常采用矢量控制(Field Oriented Control, FOC)**策略,其中PID控制器是实现速度环和电流环调节的关键组件。本教程将带你使用构建一个基于PID控制的永磁同步电机转速控制系统仿真模型PMSM电机建模矢量控制(FOC)策略实现PID控制器设计系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 6951

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

selenium爬虫运行慢如何解决?

Selenium作为一个强大的自动化工具,可用于编写爬虫程序,尽管Selenium在处理动态网页上非常强大,但对于静态网页爬简单数据提取,使用轻量级库或工具可能更加上所述,Selenium作为一个灵活可定动化工具,在需要模拟用户行为、处理动态网页内容,并进行复杂交互的爬虫任务中是一种价值的选择。

weixin_44617651的博客 3183

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Selenium实战:5分钟搭建京东图书信息爬虫,破解动态加载难题

在Web数据抓取领域,动态内容加载是常见的技术挑战,尤其对于采用前后端分离架构的现代电商网站。其原理是通过JavaScript异步请求数据并渲染,传统HTTP请求工具无法直接获取完整页面信息。为解决这一问题,Selenium等浏览器自动化工具应运而生,它们通过驱动真实浏览器执行JS代码,实现“所见即所得”的数据抓取,在开发效率和成功率上具有显著优势。这种技术特别适用于**京东图书**这类信息结构相对固定的场景,能够快速构建稳定可用的数据采集原型,为市场调研和数据分析提供支持。

weixin_30591551的博客 319

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

app登录界面背景 css_登录采集——模拟浏览器登录QQ邮箱

网络爬虫学习中,简单的静态页面数据,难以满足我们的一颗“好学”之心,且现在我们“好奇”的数据往往藏得很深,要么需要登录,要么为动态加载……今天,就来分享一下模拟浏览器对QQ邮箱(我们只是学习、分享、交流)的登录操作!1、前期准备“搞事情”之前,我们需要先准备两个工具,分别是需要模拟浏览器登录的模块selenium和对应的驱动插件chromedriver.exe这里,我们用了一个模拟浏览器登录的模块...

weixin_39639286的博客 435

Python爬虫初级(5):selenium模拟操作

Python爬虫初级(5):selenium模拟浏览器操作

一北DMY的博客 1572

Selenium爬虫实战:破解动态网页数据抓取难题

在Web数据抓取领域,动态渲染页面是常见的技术挑战。其原理在于现代网站广泛采用前后端分离架构,核心数据通过JavaScript异步加载,传统HTTP请求只能获取初始HTML框架。为解决这一问题,浏览器自动化技术应运而生,它通过模拟真实用户操作,驱动浏览器执行JavaScript并渲染完整页面,从而实现对动态内容的精准抓取。这项技术的核心价值在于能够处理复杂交互场景,如点击、滚动触发的数据加载,是应对SPA(单页应用)和Ajax密集型网站的利器。在应用层面,Selenium作为成熟的浏览器自动化工具,结合智能

dianjiaxian1205的博客 415

Selenium实战:Python爬虫批量下载百度图片全流程解析

网络爬虫是自动化获取网页数据的关键技术,其核心原理在于模拟浏览器行为或直接解析网络请求,以程序化方式提取目标信息。在动态网页场景下,传统的静态请求库难以应对由JavaScript渲染生成的内容,此时需要借助能驱动真实浏览器的工具。Selenium作为自动化测试框架,因其能完整模拟用户交互、稳定执行JavaScript并获取渲染后DOM的特性,在动态内容爬取领域展现出独特的技术价值。它尤其适用于处理像图片懒加载、无限滚动以及接口参数加密复杂的应用场景。本文以百度图片批量下载为具体案例,详细阐述了如何利用Sel

weixin_34184158的博客 380
上一篇: 1. MongoDB安装 (Win10)
下一篇: Docker部署MySQL
FormatFa
博客等级 码龄11年 91粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值