基本介绍

什么是网络爬虫

网络爬虫(Web Crawler)是一种自动化程序,用于从互联网上抓取、解析和存储网页数据。其核心功能是模拟人类浏览行为,通过HTTP/HTTPS协议访问目标网站,提取文本、链接、图片或其他结构化信息,常用于搜索引擎索引、数据分析或商业情报收集。

robots.txt

robots.txt 文件的作用

robots.txt 是网站根目录下的一个文本文件,用于告知网络爬虫哪些页面或目录可以被抓取,哪些应被禁止。它遵循 Robots 排除协议(REP),属于行业标准而非法律约束。

robots.txt 的基本语法

  • User-agent: 指定适用的爬虫名称(如 * 表示所有爬虫)。
  • Disallow: 禁止访问的路径。
  • Allow: 允许访问的路径。

示例:

User-agent: *
Disallow: /private/
Allow: /public/

常见规则示例

禁止所有爬虫访问整个网站:

User-agent: *
Disallow: /

允许所有爬虫访问全部内容:

User-agent: *
Disallow:

禁止特定爬虫(如 Googlebot):

User-agent: Googlebot
Disallow: /images/

安装requests库的方法

使用pip安装(推荐)


在命令行或终端中运行以下命令,适用于大多数Python环境:

pip install requests

验证安装


安装完成后,在Python交互环境中运行以下代码确认是否成功:

import requests
print(requests.__version__)

注意事项

  • 确保Python环境已配置PATH变量。
  • 网络问题可能导致安装失败,可尝试使用国内镜像源(如清华源):
    pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    网络爬虫中的 get() 函数

    get() 是网络爬虫中常用的 HTTP 请求方法,主要用于向服务器请求数据,GET请求是爬虫中最常见和最简单的请求方法,可以直接将URL输入,不需要其他转换,即所有需要请求的信息都包含在URL中。以下是其核心知识点和用法:


    基本语法(Python requests 库)

    import requestsresponse = requests.get(url, params=None, headers=None, timeout=5)
    
  • url: 目标网页地址
  • params: 查询参数字典(如 {'key1': 'value1', 'key2': 'value2'}
  • headers: 请求头信息(如模拟浏览器访问)
  • timeout: 超时时间(秒)

get()搜索信息

import requests
r = requests.get('https://www.ptpress.com.cn/search?keyword=word')
print(r.text)


get()添加信息

get()函数中第2个参数params会以字典的形式在url后自动添加信息,需要提前将params定义为字典。
 
示例代码:
 

import requests
info = {'keyword':'Excel' }
r = requests.get('https://www.ptpress.com.cn/search',params=info)
print(r.url)
print(r.text)


第2行代码建立字典info,包含一个键值对。
 
第3行代码使用get()函数获取网页,由于get()中包含参数params,因此系统会自动在url后添加字典信息,形式为https://www.ptpress.com.cn/search?keyword=excel,该使用形式便于灵活设定需要搜索的信息,可以添加或删除字典信息。
 
第4行代码输出返回的Response对象中的url,即获取网页的url。

response

    response对象的基本概念

    在爬虫开发中,response对象通常是HTTP请求后服务器返回的响应封装,包含状态码、响应头、响应体等关键信息。不同库的response对象结构可能略有差异,但核心功能相似。

    ​​​​​​

    response 的属性

    response 对象通常用于 HTTP 请求的响应处理,其属性会根据使用的库或框架有所不同。以下是常见场景下的属性说明:

    通用 HTTP 响应属性
    • status_code
      表示 HTTP 状态码(如 200、404),用于判断请求是否成功。

    • headers
      包含响应头的字典,例如 Content-TypeServer 信息。

    • content
      以字节形式返回原始响应内容,适用于非文本数据(如图片)。

    • text
      将响应内容解码为字符串(自动处理编码),适用于文本数据(如 HTML/JSON)。

    设置编码
     


    当访问一个网页时,如果获取的内容是乱码,可以通过设置requests.get(url)返回的Response对象的encoding='utf - 8'来修改“Response对象.text”文本内容的编码方式。同时Response对象中提供了apparent_encoding()方法来自动识别网页的编码方式,不过由于此方法是由机器自动识别,因此可能会存在识别错误的情况(大部分情况下是可用的)。
     
    如果要设置自动识别网页的编码方式,可以使用以下形式:
     
    Response对象.encoding = Response对象.apparent_encoding
     
    示例代码:
     

    import requests
    r = requests.get('此处填入\'百度官网地址\'.com')
    r.encoding = r.apparent_encoding
    print(r.text)


    第3行代码设置自动识别网页的编码方式,执行代码后的输出结果中将包含可识别的文字 。

    返回网页内容


     
    Response对象中返回网页内容有两种方法,分别是text()方法和content()方法,其中text()方法在前面的内容中有介绍,它是以字符串的形式返回网页内容。而content()方法是以二进制的形式返回网页内容,常用于直接保存网页中的媒体文件。

    import requests
    r = requests.get('https://cdn.ptpress.cn/uploadimg/Material/978-7-115-41359-8/72jpg/41359.jpg')
    f2 = open('b.jpg','wb')
    f2.write(r.content)
    f2.close()


    第2行代码使用get()方法访问了图片url。
    第3行代码使用open()函数创建了一个‘b.jpg’文件,并且设置以二进制写入的模式。
    第4行代码将获取的url内容以二进制形式写入文件。
    执行代码后将在相应文件夹中存储一张图片

    代理服务器

    代理服务器在爬虫中的作用

    代理服务器在爬虫中主要用于隐藏真实IP地址,避免被目标网站封禁或限制访问。通过代理IP发送请求,可以模拟不同地区的用户访问,提高爬虫的稳定性和成功率。

    代理服务器的获取方式

    • 免费代理:公开的代理IP池,但稳定性差,可用率低。
    • 付费代理:提供高可用性和低延迟的代理服务。

    如何在爬虫中使用代理

    Python的requests库可以通过proxies参数设置代理:

    import requestsproxies = {"http": "http://10.10.1.10:3128","https": "http://10.10.1.10:1080",
    }response = requests.get("http://example.com", proxies=proxies)
    print(response.text)
    

    代理服务器的管理

    1. IP轮换:随机或按策略切换代理IP,避免单一IP被封。
    2. 速率控制:控制请求频率,减小被封禁的概率。

    selenium库驱动浏览器

    安装Selenium库

    通过pip命令安装Selenium库:

    pip install selenium
    
    pip install selenium -i https://pypi.mirrors.ustc.edu.cn/simple/
    

    下载浏览器驱动

    根据使用的浏览器下载对应的驱动(以Chrome为例):

    • ChromeDriver:从ChromeDriver官网下载与浏览器版本匹配的驱动。
    • 其他浏览器
      • Firefox:下载GeckoDriver。
      • Edge:下载EdgeDriver。

    将驱动文件解压后放入系统路径(如/usr/local/bin或项目目录)。

    基本使用方法

    初始化WebDriver并打开浏览器:

    from selenium import webdriver# Chrome浏览器示例
    driver = webdriver.Chrome(executable_path='path/to/chromedriver')
    driver.get("https://www.example.com")
    

    注意事项

    • 确保浏览器驱动版本与浏览器版本兼容。
    • 使用完毕后调用driver.quit()释放资源。
    • 显式等待比隐式等待更高效,推荐优先使用。

    通过以上方法,可以灵活控制浏览器行为,适用于自动化测试、数据抓取等场景。

     驱动浏览器


    selenium库支持的浏览器包括Chrome、IE 7~11、Firefox、Opera Edge、HtmlUnit、PhantomJS等,几乎覆盖了当前计算机端和手机端的所有类型的浏览器。在selenium库源代码文件下的webdriver中可查看所有支持的浏览器类型
     
    webdriver的使用形式如下:
     

    webdriver.浏览器类型名()
    


    例如驱动Chrome浏览器的使用方法为webdriver.Chrome(),驱动Opera浏览器的使用方法为webdriver.opera()。每个文件夹中都存在一个webdriver.py文件,当调用webdriver.Chrome()时,会默认调用chrome\webdriver.py文件中的类WebDriver。

    webdriver.Chrome()的使用形式如下:
     

    webdriver.Chrome(executable_path = "chromedriver", port = 0, options = None)


    功能:创建一个新的Chrome浏览器驱动程序。
     
    参数executable_path:表示浏览器的驱动路径,默认为环境变量中的path,通常计算机中可能存在多个浏览器软件,当没有在环境变量中设置浏览器path时,可以使用参数options。
     
    参数port:表明希望服务运行的端口,如果保留为0,驱动程序将会找到一个空闲端口。
     
    参数options:表示由类Options(位于selenium\webdriver\chrome\options.py)创建的对象,用于实现浏览器的绑定。
     
    示例代码(驱动Chrome浏览器):
     

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)


     
    第3、4行代码使用类Options创建了一个对象 chrome_options ,使用 binary_location() 方法绑定了浏览器。
    第5行代码使用 webdriver.Chrome() 设置 options 参数值为绑定Chrome浏览器的对象 chrome_options 。
    执行代码后将会自动打开Chrome浏览器,实现驱动浏览器的第一步。
     
    注意
    该代码中的浏览器安装地址为计算机上Chrome浏览器的安装地址,读者在实践操作时需要使用自己计算机中浏览器的安装地址。可以通过鼠标右键单击浏览器图标,选择快捷菜单中的“属性”选项即可

    加载网页

    接下来介绍两种常用的加载浏览器网页的方法。
     
    第1种,get()方法。

    get()方法用于打开指定的网页
     
    示例代码(加载人民邮电出版社官网中的期刊页):
     

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn//periodical')


    第6行代码使用get()方法加载人民邮电出版社官网的期刊页,执行代码后将会自动启动Chrome浏览器并加载出相应网页,结果如图15-33所示。
     
    第2种,execute_script()方法。execute_script()方法用于打开多个标签页,即在同一浏览器中打开多个网页。
    功能:打开标签页,同步执行当前页面中的JavaScript脚本。JavaScript是网页中的一种编程语言。
    参数script:表示将要执行的脚本内容,数据类型为字符串类型。使用JavaScript语言实现打开一个新标签页的使用形式为 "window.open('网站url','_blank');" 。
     
    示例代码(打开多个标签页):

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn/')
    driver.execute_script("window.open('https://www.ptpress.com.cn/login','_blank');")
    driver.execute_script("window.open('https://www.shuyishe.com/','_blank');")
    driver.execute_script("window.open('https://www.shuyishe.com/course','_blank');")

    获取渲染后的网页代码


    通过get()方法获取浏览器中的网页资源后,浏览器将自动渲染网页源代码内容,并生成渲染后的内容,这时使用page_source()方法即可获取渲染后的网页代码。
     
    示例代码:
     

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn/')
    print(driver.page_source)
    


    第7行代码使用driver对象中的page_source()方法获取被get()方法获取到的渲染后的网页源代码。

    案例

    提取关键字为python的图书封面图片:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import requests
    import rechrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn/search?keyword=python')
    a = re.findall('< img src="(.+?jpg)"></div>', driver.page_source)
    i = 1
    for url in a:r = requests.get(url)f2 = open('.\\Python图书\\' + str(i) + '.jpg', 'wb')i += 1f2.write(r.content)f2.close()

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

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    AndroidX中ComponentActivity与原生 Activity 的区别

    一、AndroidX 与原生 Activity 的区别 1. 概念与背景 原生 Activity&#xff1a;指 Android 早期&#xff08;API 1 起&#xff09;就存在于 android.app 包下的 Activity 类&#xff08;如 android.app.Activity&#xff09;&#xff0c;是 Android 最初的 Activity 实现&…

    Spring AI 使用 Elasticsearch 作为向量数据库

    前言 嗨&#xff0c;大家好&#xff0c;我是雪荷&#xff0c;最近在公司开发 AI 知识库&#xff0c;同时学到了一些 AI 开发相关的技术&#xff0c;这期先与大家分享一下如何用 ES 当做向量数据库。 安装ES 第一步我们先安装 Elasticsearch&#xff0c;这里建议 Elasticsear…

    TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 与 tsconfig.node.json 的深度指南

    前言在现代前端和后端开发中&#xff0c;TypeScript 已经成为许多开发者的首选语言。然而&#xff0c;TypeScript 的配置文件&#xff08;特别是多个配置文件协同工作时&#xff09;常常让开发者感到困惑。本文将深入探讨 tsconfig.json、tsconfig.app.json 和 tsconfig.node.j…

    读书笔记(学会说话)

    1、一个人只有会说话&#xff0c;才会有好人缘&#xff0c;做事才会顺利。会说话的人容易成功。善于说话的人易成功&#xff0c;而不善说话的人往往寸步难行。我们要把话说得好听&#xff0c;同时更要把事做得漂亮。或许一句话&#xff0c;一件事&#xff0c;就可能使人生的旅途…

    私有服务器AI智能体搭建-大模型选择优缺点、扩展性、可开发

    以下是主流 AI 框架与模型的对比分析&#xff0c;涵盖其优缺点、扩展性、可开发性等方面。 文章目录一、AI 框架对比二、主流大模型对比三、扩展性对比总结四、可开发性对比总结五、选择建议&#xff08;按场景&#xff09;六、未来趋势一、AI 框架对比 框架优点缺点扩展性可开…

    OpenCV直线段检测算法类cv::line_descriptor::LSDDetector

    操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该类用于实现 LSD (Line Segment Detector) 直线段检测算法。LSD 是一种快速、准确的直线检测方法&#xff0c;能够在不依赖边缘检测的前提下直接从…

    Go语言流程控制(if / for)

    分支结构package mainimport ("fmt""strconv" )/* 1.顺序结构 2.分支结构 3.循环结构 *//* if 条件1 {// 条件1为真时执行的代码 } else if 条件2 {// 条件1为假但条件2为真时执行的代码 } else {// 所有条件均为假时执行的代码 }一种特殊的条件分支结构if…

    wx小程序设置沉浸式导航文字高度问题

    第一步&#xff1a;在app.json中设置"navigationStyle": "custom"第二步骤&#xff1a;文件的home.js中// pages/test/test.js Page({/*** 页面的初始数据*/data: {statusBarHeight: 0,navBarHeight: 44 // 自定义导航内容区高度(单位px)},/*** 生命周期函…

    C++算法竞赛篇:DevC++ 如何进行debug调试

    C算法竞赛篇&#xff1a;DevC 如何进行debug调试前言一、准备工作&#xff1a;编译生成可执行程序二、核心步骤&#xff1a;设置断点与启动调试1. 设置断点2. 启动调试模式三、调试操作&#xff1a;逐步执行与变量监控1. 逐步执行代码2. 监控变量值变化四、调试结束前言 在算法…

    语音大模型速览(三)- cosyvoice2

    CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2412.10117代码链接&#xff1a;https://github.com/FunAudioLLM/CosyVoice 一句话总结 CosyVoice 2 是一款改进的流式语音合成模型&#xff0c;其…

    -lstdc++与-static-libstdc++的用法和差异

    CMakeLists.txt 里写了&#xff1a; target_link_libraries(${PROJECT_NAME} PRIVATEgccstdc ) target_link_options(${PROJECT_NAME} PRIVATE -static-libstdc)看起来像是“链接了两次 C 标准库”&#xff0c;其实它们的作用完全不同&#xff1a;1. target_link_libraries(...…

    Redis学习其二(事务,SpringBoot整合,持久化RDB和AOF)

    文章目录5,事务5.1Redis 事务不保证原子性的原因5.2事务操作过程5.3监控6,SpringBoot整合Redis6.1Redis客户端6.1.1Jedis简单使用6.1.2Lettuce&Jedis6.2配置相关6.3使用6.3.1使用RedisTemplate6.3.2Redis工具类7,持久化RDB7.1RDB持久化原理7.2触发机制save命令flushall命令…

    springboot项目部署到K8S

    java后台 创建harbor镜像拉取Secret&#xff1a;kubectl create secret docker-registry harbor-regcred \--docker-server \ #harbor仓库地址--docker-username \ #harbor 账号--docker-password \ #harbor密码-n productionDockerfile FROM *harbor地址*/library/custom-jdk…

    【FPGA开发】一文轻松入门Modelsim的基本操作

    Modelsim仿真的步骤 &#xff08;1&#xff09;创建新的工程。 &#xff08;2&#xff09;在弹出的窗口中&#xff0c;确定项目名和工作路径&#xff0c;库保持为work不变(如有需要可以根据需求进行更改)。 &#xff08;3&#xff09;添加已经存在的文件&#xff08;rtl代码和t…

    服务攻防-Java组件安全FastJson高版本JNDI不出网C3P0编码绕WAF写入文件CI链

    服务攻防-Java组件安全&FastJson&高版本JNDI&不出网C3P0&编码绕WAF&写入文件CI链26天 原创 朝阳 Sec朝阳 2025年07月18日 09:23 湖北 标题已修改 演示环境&#xff1a; https://github.com/lemono0/FastJsonParty FastJson全版本Docker漏洞环境(涵盖1.…

    【Python】DRF核心组件详解:Mixin与Generic视图

    在 Django REST Framework (DRF) 中&#xff0c;mixins.CreateModelMixin、mixins.ListModelMixin、GenericAPIView 和 GenericViewSet 是构建 API 视图的核心组件。以下是对这些组件的主要方法及其职责的简要说明&#xff0c;内容清晰且结构化&#xff1a;1. mixins.CreateMod…

    HTML+CSS+JS基础

    文章目录&#xff08;一&#xff09;html1.常见标签&#xff08;1&#xff09;注释&#xff08;2&#xff09;标题 h1~h6&#xff08;3&#xff09;段落 p&#xff08;4&#xff09;换行与空格 br \ &#xff08;5&#xff09;格式化标签 b i s u&#xff08;6&#xff09;…

    Vue导出Html为Word中包含图片在Microsoft Word显示异常问题

    问题背景 碰到一个问题&#xff1a;将包含图片和SVG数学公式的HTML内容导出为Word文档时&#xff0c;将图片都转为ase64格式导出&#xff0c;在WPS Word中显示正常&#xff0c;但是在Microsoft Word中出现图片示异常。具体问题表现 WPS兼容性&#xff1a;在WPS中显示正常&#…

    椭圆曲线密码学 Elliptic Curve Cryptography

    密码学是研究在存在对抗行为的情况下还能安全通信的技术。即算法加密信息&#xff0c;再算法解密出信息。加密分为两类 1. Symmetric-key Encryption (secret key encryption) 即一种密钥&#xff0c;加密和解密使用同一密钥&#xff0c;可相互转换 2. Asymmetric-key Encry…

    wedo牛-----第47节(免费分享图纸)

    夸克网盘&#xff1a;https://pan.quark.cn/s/4b40a8d18979 高清图纸源文件&#xff0c;需要的请自取