当前位置: 首页 > news >正文

网络爬虫的详细知识点

基本介绍

什么是网络爬虫

网络爬虫(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.lryc.cn/news/591857.html

    相关文章:

  • Spring 多模块配置国际化,MessageSource只能加载一个文件
  • 栈和队列的题目,咕咕咕
  • Python基础--嵌套循环
  • 尚庭公寓----------分页查询
  • 【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
  • 树莓派Qt 安装
  • 数据结构 栈(1)
  • 常用API
  • 【深度学习新浪潮】AI在finTech领域有哪些值得关注的进展?
  • Redis中什么是看门狗机制
  • Paimon 动态分桶
  • 大型语言模型的白日梦循环
  • 【软件测试】软件测试分类与方法解析:目标到工具
  • LINUX例行性工作(计划任务)实验操作 ---at和crontab以及系统级别的计划任务
  • Python学习之——序列化与反序列化
  • 链路聚合实训
  • 解决 MyBatis/MyBatis-Plus 中 UUID 类型转换错误的最佳实践
  • MS Project替代方案:5款项目管理工具测评,8Manage PM为何更优?
  • vue svg实现一个环形进度条组件
  • 进程终止机制详解:退出场景、退出码与退出方式全解析
  • STM32 IAR 生成工程后配置
  • 时序数据库选型指南︰为什么IoTDB成为物联网场景首选?
  • UML用例规范,use case diagram
  • halcon 检测直线
  • OpenCV学习笔记二(色彩空间:RGB、HSV、Lab、mask)
  • DocsGPT:您的智能知识助手,解锁高效信息检索
  • 前端之HTML学习
  • 项目实战(18)-POE分离器
  • 渗透总结一
  • 手机兼容测试服务提供商对比分析:如何选择最合适的测试平台