python爬虫学习——1

一、Python 爬虫核心原理

爬虫本质是模拟浏览器向目标网站发送 HTTP 请求,获取网页响应数据(HTML/JSON 等),再从中提取所需信息(文字、图片链接等),最后将信息保存或进一步处理。

核心流程:

  1. 发送请求:向目标网站的 URL 发送 HTTP 请求(GET/POST 为主),获取响应;
  2. 解析响应:将返回的 HTML/JSON 数据解析成可提取的格式;
  3. 提取信息:从解析后的数据中筛选文字、图片链接等目标内容;
  4. 保存 / 处理:将提取的文字存为文件、图片下载到本地,或其他操作。

二、基础操作拆解(无代码,仅核心逻辑)

1. 打开指定网站(发送 HTTP 请求)
  • 核心目标:获取目标网站的原始数据(HTML 源码)。
  • 关键逻辑
    • 模拟浏览器:网站会校验请求的 "身份"(User-Agent),需伪装成浏览器请求,避免被反爬拦截;
    • 处理请求异常:如网站无法访问(404/500 错误)、网络超时等,需做异常判断;
    • 编码处理:网页返回的内容可能有不同编码(如 UTF-8、GBK),需匹配编码才能正确解析。
2. 爬取文字
  • 核心目标:从 HTML 源码中提取有效文字(排除广告、脚本、样式等无关内容)。
  • 关键逻辑
    • 解析 HTML:将杂乱的 HTML 源码转换成结构化的 "标签树",方便按标签 / 属性定位文字;
    • 定位文字区域:通过网页的标签特征(如<div class="content"><p><h1>等),定位包含目标文字的标签;
    • 清理文字:去除提取后文字中的多余空格、换行、特殊符号,只保留有效内容;
    • 可选操作:按需求筛选(如只提取标题、正文,排除导航栏 / 页脚文字)。
3. 爬取图片
  • 核心目标:从 HTML 中提取图片链接,再下载图片到本地。
  • 关键逻辑
    • 提取图片链接:在 HTML 中找到<img>标签,获取其src属性(图片的 URL),注意处理相对路径(需拼接网站域名成完整 URL);
    • 过滤无效链接:排除非图片链接(如 base64 格式的内嵌图片、广告图片);
    • 下载图片:向图片链接发送独立的 HTTP 请求,获取图片的二进制数据,再将二进制数据写入本地文件(如.jpg/.png 格式);
    • 保存管理:创建专门的文件夹存放图片,避免文件名重复、路径错误。

三、核心工具 / 概念(Python 爬虫常用)

操作场景 核心工具 / 概念 作用
发送请求 requests 库 简化 HTTP 请求的发送,处理请求头、超时、异常等
解析 HTML BeautifulSoup 库 将 HTML 转换成标签树,支持按标签 / 类名 / 属性定位内容
处理图片路径 URL 解析(urljoin/urlparse) 拼接相对路径为完整图片 URL,解析 URL 中的文件名
保存数据 文件操作 文字存为.txt/.json 文件,图片以二进制形式写入.jpg/.png 文件
反爬规避 请求头伪装、延时请求 避免频繁请求被封 IP,伪装浏览器降低被拦截概率

四、注意事项

  1. 合规性:爬取前需确认网站的 robots 协议(是否允许爬取),避免爬取受版权保护的内容,不恶意高频请求(防止攻击网站);
  2. 反爬应对:部分网站会设置验证码、IP 封锁、Cookie 验证等,基础爬虫需适配简单反爬策略;
  3. 资源管理:下载图片时需控制并发数,避免占用过多网络资源,同时合理命名文件、管理存储路径。

获取网站允许爬虫的 "白名单"(即网站允许爬取的路径 / 内容范围),核心是查看网站的 robots.txt 协议文件 ------ 这是网站与爬虫之间的 "约定",明确告知哪些内容可爬、哪些不可爬,也是最权威的 "白名单 / 黑名单" 依据。以下是具体方法和相关细节:

一、核心方式:访问网站的 robots.txt 文件

1. 访问路径

所有合规网站的 robots.txt 都放在域名根目录下,格式为:https://目标域名/robots.txt

举例:

直接在浏览器地址栏输入该 URL,即可查看网站的爬虫规则。

2. 解读 robots.txt 规则(白名单核心)

robots.txt 采用简单的文本规则,核心字段如下,重点关注 Allow(白名单)和 Disallow(黑名单):

字段 含义
User-agent 针对的爬虫标识(* 代表所有爬虫)
Allow 允许爬取的路径(白名单),优先级高于 Disallow
Disallow 禁止爬取的路径(黑名单)
Sitemap 网站的站点地图(可选),里面会列出网站的核心页面,也是 "推荐爬取" 范围
示例(简化版百度 robots.txt):

plaintext

复制代码
User-agent: *
Disallow: /baidu
Allow: /baidu.html
Allow: /s?
Disallow: /cache
Sitemap: https://www.baidu.com/sitemap.xml

解读:

  • 所有爬虫(*)禁止爬取 /baidu/cache 路径;
  • 允许爬取 /baidu.html/s? 路径(白名单);
  • 推荐爬取 sitemap.xml 里列出的页面。
3. 关键注意点
  • 路径规则/ 代表根目录,/xxx/ 代表 xxx 目录下所有内容,/xxx.html 仅指定该文件;
  • 优先级Allow 优先级 > Disallow(即如果某路径同时出现在 Allow 和 Disallow,以 Allow 为准);
  • 特殊爬虫 :部分网站会为特定爬虫(如百度蜘蛛、谷歌爬虫)单独设置规则,若你是自定义爬虫,以 User-agent: * 对应的规则为准。

二、补充方式:查看网站的 Sitemap(站点地图)

很多网站会在 robots.txt 里附上 Sitemap 链接(如 https://xxx.com/sitemap.xml),这是网站主动提供的 "核心页面清单",相当于 "官方推荐爬取的白名单"。

访问该 Sitemap 链接,能看到网站整理的所有重要 URL(如文章、产品页面),这些都是网站允许 / 推荐爬取的内容。

三、特殊情况:无 robots.txt 或规则模糊

  1. 无 robots.txt 文件 :若访问 域名/robots.txt 返回 404,说明网站未设置爬虫规则,不代表 "允许爬取所有内容",仅代表无明确约定,此时需遵循 "谨慎爬取" 原则(避免高频请求、不爬取隐私 / 付费内容)。

  2. 规则仅列 Disallow 无 Allow:说明 "未明确禁止的路径都允许爬取"(默认规则),此时 "白名单"= 所有未被 Disallow 标注的路径。

四、合规爬取的额外注意事项

  1. robots.txt 仅为约定,非法律强制:但违反该规则可能导致你的爬虫被网站封禁(如 IP 拉黑),商业爬取还可能涉及法律风险;
  2. 动态内容验证 :部分网站的 robots.txt 规则可能未及时更新,爬取前可结合实际页面的版权声明、用户协议判断;
  3. 反爬机制兼容:即使在白名单内,高频请求仍可能被反爬系统拦截,需控制请求频率、伪装浏览器请求头。

总结

获取网站爬虫白名单的核心步骤:

  1. 访问 https://目标域名/robots.txt 查看官方规则;
  2. 提取 Allow 字段对应的路径(白名单);
  3. 参考 Sitemap 链接获取推荐爬取的页面;
  4. 无明确规则时,仅爬取公开、非敏感内容,且控制爬取频率。

自我练习实例

python 复制代码
# import requests
# import re
# r = requests.get('https://m.hupu.com/hot')
# result = re.findall(r'hot_hot-page-item-title__HL2kw">(.+?)</div>',r.text)
# for i in range(len(result)):
#     print('热点', i+1,  result[i])

# import fake_useragent
# import requests
# from lxml import etree
# import os
#
# n = 0
# def count():
#     global n
#     n+=1
#     return n
#
# if not os.path.exists("./Picture"):
#     os.mkdir("./Picture")
# head = {
#     "User-Agent":fake_useragent.UserAgent().random
# }
# for i in range(1,3):
#     url = f'https://10wallpaper.com/list_wallpapaers/page/{i}'
#     resp = requests.get(url,headers=head)
#     result = resp.text
#     tree = etree.HTML(result)
#     p_list = etree.xpath("//div[@id='pics-list']/p")
#     for p in p_list:
#        img_url = p.xpath("./a/img/@src")[0]
#        img_url2 = 'https://10wallpaper.com' + img_url
#        print(img_url2)
#        img_name = count()
#        print(img_name)
#        img_resp = requests.get(img_url2, headers=head)
#        img_content = img_resp.content
#        with open(f"./Picture/{img_name}.jpg", "wb") as fp:
#         fp.write(img_resp.content)

# from selenium import webdriver
# from selenium.webdriver.edge.options import Options
# edge_options = Options()
#
# edge_options.binary_location = r"c:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
# DRIVER_PATH = r"C:\Users\叶梓聪\AppData\Local\Programs\Python\Python37\Scripts\msedgedriver.exe"
# driver =webdriver.Edge(options=edge_options)
# driver.get('https://www.ptpress.com.cn/')
# input('dengdai')

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
import os

# 1. 配置路径(已验证正确)
EDGE_BIN_PATH = r"C:\Program Files\Microsoft\Edge\Application\msedge.exe"
DRIVER_PATH = r"C:\Users\叶梓聪\AppData\Local\Programs\Python\Python37\Scripts\msedgedriver.exe"

# 验证驱动存在(避免路径错误)
if not os.path.exists(DRIVER_PATH):
    print(f"❌ 驱动不存在:{DRIVER_PATH}")
    exit()

# 2. 配置Edge选项
edge_options = Options()  # 指定浏览器路径
edge_options.add_experimental_option('excludeSwitches', ['enable-logging'])  # 禁用日志干扰

# 3. 初始化驱动服务
driver_service = Service(executable_path=DRIVER_PATH, log_path=os.devnull)

# 4. 启动浏览器并访问网站
try:
    driver = webdriver.Edge(service=driver_service, options=edge_options)
    print("✅ Edge浏览器启动成功!")
    driver.get('https://www.ptpress.com.cn/')  # 访问目标网站
    driver.maximize_window()  # 窗口最大化
    input("\n按回车键关闭浏览器...")  # 等待操作
    driver.quit()
    print("✅ 浏览器已关闭")
except Exception as e:
    print(f"❌ 错误:{str(e)}")
    try:
        driver.quit()
    except:
        pass
相关推荐
二川bro2 小时前
字符串特性解析:Python不可变性引发的错误
android·开发语言·python
呆萌小新@渊洁3 小时前
声纹模型全流程实践-开发(训练 - 微调 - 部署 - 调用)
linux·服务器·python·语音识别
TL滕3 小时前
从0开始学算法——第十四天(数组与搜索)
数据结构·笔记·学习·算法
Aspect of twilight3 小时前
vscode python debug方式
ide·vscode·python·debug
派大鑫wink3 小时前
网络工程师入门学习第二篇:TCP/IP协议与路由协议深入
网络·学习·tcp/ip
陪我一起学编程3 小时前
uv包管理工具
python·uv·虚拟环境·包管理工具·项目工程化·项目规范·pip、conda、pdm
盼哥PyAI实验室3 小时前
Python自定义HTTP客户端:12306抢票项目的网络请求管理
开发语言·python·http
这儿有一堆花3 小时前
Python优化内存占用的技巧
开发语言·python
AI360labs_atyun3 小时前
呼吸疾病+AI,人工智能正在改变慢病治疗
人工智能·科技·学习·ai