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

python网络爬虫(第一步:网络爬虫库、robots.txt规则(防止犯法)、查看获取网页源代码)

python网络爬虫(第一步:网络爬虫库、robots.txt规则(防止犯法)、查看获取网页源代码)

(学习第二步在这里)

python网络爬虫(第二步:安装浏览器驱动,驱动浏览器加载网页、批量下载资源)-CSDN博客

网络爬虫库

  1. urllib库
    作为Python内置的标准HTTP库,urllib提供了基础的网络请求功能。其优势在于无需额外安装,适合快速验证性开发或受限环境使用。但由于API设计较为底层,处理复杂请求时需要编写更多样板代码,开发效率相对较低。

  2. requests库
    这个广受欢迎的第三方库在urllib基础上进行了高层封装,提供了更符合Python风格的API设计。支持会话保持、自动编解码等高级特性,大幅提升了开发效率。其简洁的语法和丰富的文档使其成为日常爬虫开发的首选工具。

  3. scrapy框架
    这是一个专业级的爬虫框架,采用完整的架构设计。不仅支持高性能的并发爬取,还内置了数据处理管道、中间件系统等企业级功能。适合构建复杂的分布式爬虫系统,学习曲线相对较陡但扩展性极强。

  4. selenium工具
    通过浏览器自动化技术,selenium能够完美处理动态渲染的网页内容。虽然执行效率较低,但在需要模拟用户操作或破解反爬机制时具有不可替代的优势。除了爬虫应用,还广泛用于Web自动化测试领域。

robots.txt规则(防止犯法)

robots.txt 是网站用来指导搜索引擎爬虫(如 Googlebot、Baiduspider)如何抓取网站内容的文本文件,遵循 Robots 排除协议(REP)。它放置在网站的根目录(如 https://example.com/robots.txt),供爬虫在访问其他页面前优先读取。


基本规则

  1. User-agent

    • 指定规则适用的爬虫名称,* 表示所有爬虫。

    • 示例:

      User-agent: Googlebot   # 仅对谷歌爬虫生效
      User-agent: *          # 对所有爬虫生效
  2. Disallow

    • 禁止爬虫访问的路径(支持通配符 *)。

    • 示例:

      Disallow: /private/    # 禁止访问 /private/ 目录
      Disallow: /tmp/*.html  # 禁止所有 /tmp/ 下的 .html 文件
  3. Allow

    • 允许爬虫访问的路径(优先级高于 Disallow)。

    • 示例:

      Allow: /public/        # 允许访问 /public/ 目录
      Allow: /search/        # 允许访问 /search/ 路径
  4. Sitemap

    • 指定网站的站点地图(XML格式)位置,帮助爬虫发现内容。

    • 示例:

      Sitemap: https://example.com/sitemap.xml

常见规则示例

1. 禁止所有爬虫访问全站

User-agent: *
Disallow: /

2. 禁止所有爬虫访问特定目录

User-agent: *
Disallow: /admin/
Disallow: /logs/

3. 针对不同爬虫设置不同规则

User-agent: Googlebot
Allow: /news/
Disallow: /draft/

User-agent: Baiduspider
Disallow: /

4. 允许爬虫访问部分动态参数页面

User-agent: *
Allow: /search?q=*
Disallow: /search?*&private=*


如果网站没有robots.txt规则,如下:

一般默认允许用户使用爬虫工具访问,但仍要遵循《中华人民共和国网络安全法》

如:人民邮电出版社https://www.ptpress.com.cn/robots.txt

如果网站有robots.txt规则(以b站为例):

bilibili.com/robots.txthttps://www.bilibili.com/robots.txt

所有爬虫通用规则(针对所有爬虫)

  1. 禁止访问的路径

    • Disallow: /medialist/detail/
      屏蔽所有爬虫访问 /medialist/detail/ 目录下的内容(如某些媒体详情页)。

    • Disallow: /index.html
      禁止抓取根目录下的 index.html 文件。

  2. 最终兜底规则

    • 最后的 User-agent: * + Disallow: /
      优先级最高,表示未明确允许的其他爬虫将完全禁止访问整个网站(之前单独允许的爬虫除外)。


针对特定爬虫的例外规则

以下爬虫被单独允许访问全站(不受最终 Disallow: / 限制):

  • Yisouspider(神马搜索)

  • Applebot(苹果搜索)

  • bingbot(微软必应)

  • Sogou(搜狗蜘蛛)

  • 360Spider(360搜索)

  • Googlebot(谷歌)

  • Baiduspider(百度)

  • Bytespider(字节跳动)

  • PetalBot(华为花瓣搜索)


社交媒体爬虫的特殊权限

仅允许以下机器人访问 /tbhx/hero 路径(可能是活动页或英雄页面):

  • facebookexternalhit(Facebook)

  • Facebot(Facebook)

  • Twitterbot(Twitter)
    其他路径仍被禁止。

学习查找获取网页源代码

网页空白处右键,点击 “检查” 

点击左上角的按键

将鼠标移动到页面中需要找的图片或者文本,点击后,右侧会跳转至代码所处位置

双击蓝色标记处,复制路径,或右键复制元素

现在我们来做一些练习吧:

代码 1

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

运行结果:打印出人民邮电出版社官网的 HTML 源代码。
代码解析:该函数使用 requests 库的 get 方法向指定 URL 发送 HTTP GET 请求,获取网页内容并存储在响应对象 r 中,r.text 返回网页的文本内容。

代码 2

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

运行结果:打印出人民邮电出版社官网搜索关键词 “excel” 后的搜索结果页面的 HTML 源代码。
代码解析:向指定 URL 发送带关键词参数的 GET 请求,获取搜索结果页面内容。

代码 3

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

运行结果:先打印出完整的请求 URL(人民邮电出版社),再打印搜索结果页面的 HTML 源代码。
代码解析:通过 params 参数传递字典形式的查询参数,构建完整请求 URL 并获取响应内容。

代码 4

import requests
r = requests.get('https://www.ptpress.com.cn')
print(r.status_code)   #输出:200
if r.status_code==200:print(r.text)
else:print('本次访问失败')

运行结果:先打印 HTTP 状态码(200 表示成功),若成功则打印网页 HTML 源代码,否则打印访问失败提示。
代码解析:通过 status_code 属性判断请求是否成功,并根据结果进行不同处理。

状态码200:请求成功

状态码301:网页内容被永久转移到其他URL

状态码404:请求的网页不存在

状态码500:内部服务器错误

代码 5

import requests
r = requests.get('https://www.baidu.com')
r.encoding = r.apparent_encoding
print(r.text)

运行结果:打印百度首页的 HTML 源代码,确保中文能正常显示。
代码解析:通过 apparent_encoding 属性自动检测网页实际编码,并将其赋值给 encoding 属性,解决中文乱码问题。

代码 6

按上面操作获取一个图片的路径

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()

运行结果:将指定 URL 的图片下载并保存为本地文件 b.jpg。
代码解析:使用 content 属性获取响应的二进制内容(适用于图片、文件等),并以二进制写入模式将内容写入文件。

代码 7

import requests
import re
r = requests.get('https://www.ryjiaoyu.com/tag/details/7')
result = re.findall(r'title=(.+?)">(.+?)</a></h4>',r.text)
for i in range(len(result)):print('第',i+1,'本书: ',result[i][1])

运行结果:打印出网页中匹配正则表达式的书籍标题信息。
代码解析:使用正则表达式从网页文本中提取书籍标题信息,返回一个包含匹配结果的列表,并遍历打印。

学爬虫一定要学正则表达式,很简单,去这里学:

python正则表达式re(Regular Expression)-CSDN博客https://blog.csdn.net/2302_78022640/article/details/149300302?spm=1011.2415.3001.5331

以下内容知识点速过

代码 8

'''post 请求'''

import requests
d={'OldPassword':'123python','NewPassword':'123456python','ConfirmPassword':'123456python'}
r = requests.post('https://account.ryjiaoyu.com/change-password', data=d)
print(r.text)

运行结果:打印密码修改页面的响应内容。
代码解析:使用 post 方法向指定 URL 发送包含表单数据的 HTTP POST 请求,用于提交数据(如修改密码)。(看终端)

代码 9

import requests
fp ={"file":open('bitbug.ico','rb')}
r = requests.post('http://httpbin.org/post',files = fp)
print(r.text)

运行结果:打印httpbin.org测试服务返回的包含上传文件信息的响应内容。
代码解析:通过 files 参数上传文件,将本地文件以二进制模式打开并作为请求的一部分发送。(看终端)

代码 10

'''会话'''

import requests
s = requests.Session()
data = {'Email': '15156883862','Password': '123python','RememberMe': 'true','__RequestVerificationToken': 'qh6oY_zP255k2dk83pW5ZNajoAMQD9QxP3tLOK5f54wmccKgzOPCoUhHP5ICO5xlqg2yyLZM_NisZJyOzNszwZcKEteXOInHEv6sW9HlY9Q1'}
r1 = s.post('https://account.ryjiaoyu.com/log-in?returnUrl=https%3a%2f%2fwww.ryjiaoyu.com%2f',data=data)
r2 = s.get('https://www.ryjiaoyu.com/user')
print(r1.text, r2.text)

运行结果:依次打印登录页面和用户页面的响应内容。
代码解析:使用 Session 对象保持会话状态,在登录后可以访问需要权限的页面。

代码 11

'''代理服务器'''

import requests
proxie = {'http':'http://115.29.199.16:8118'}
r = requests.get('https://www.ryjiaoyu.com/',proxies= proxie)
print(r.text)

运行结果:打印通过代理服务器访问网页的响应内容。
代码解析:通过 proxies 参数设置代理服务器,用于隐藏真实 IP突破访问限制(爬多了被网站拉黑了)

代码 12

import requests
import re
def get_Token(s):r0 = s.get('https://account.ryjiaoyu.com/log-in?ReturnUrl=https%3A%2F%2Fwww.ryjiaoyu.com%2Fuser')result = re.findall(r'__RequestVerificationToken(.+)value="(.+)" />', r0.text)return r0,result[0][1]
s = requests.Session()
r0,Token =  get_Token(s)
data = {'__RequestVerificationToken':Token,'Email': '15156883862','Password': '123python','RememberMe': 'true'}
r1 = s.post('https://account.ryjiaoyu.com/log-in?returnUrl=https%3a%2f%2fwww.ryjiaoyu.com%2f',data=data)
r2 = s.get('https://www.ryjiaoyu.com/user')
f0 = open('登录前前的网页.html','w',encoding='utf-8')
f1 = open('登录前的网页.html','w',encoding='utf-8')
f2 = open('登录后的网页.html','w',encoding='utf-8')
f0.write(r0.text)
f1.write(r1.text)
f2.write(r2.text)
f0.close()
f1.close()
f2.close()

运行结果:将登录过程中的三个页面内容分别保存为本地 HTML 文件。
代码解析:定义函数获取 CSRF 验证令牌,使用 Session 对象保持会话状态完成登录,并将不同阶段的页面内容保存到文件中。

(学习第二步在这里)

python网络爬虫(第二步:安装浏览器驱动,驱动浏览器加载网页、批量下载资源)-CSDN博客

http://www.dtcms.com/a/285285.html

相关文章:

  • 2025年6月GESP(C++一级):假期阅读
  • Baumer工业相机堡盟工业相机如何通过YoloV8模型实现人物识别(C#)
  • 2025年6月GESP(C++一级):值日
  • VOTE:基于轨迹集成投票的视觉-语言-动作模型优化
  • 掌握工程化固件烧录,开启你的技术进阶之路-STM32系列
  • C#将类属性保存到Ini文件方法(利用拓展方法,反射方式获取到分组名和属性名称属性值)
  • vue-cli 模式下安装 uni-ui
  • 2-Vue3应用介绍
  • STM32f103ZET6之ESP8266模块
  • AlpineLinux的内核优化
  • AI搜索+GEO时代的营销策略更迭学习笔记
  • 计算机的网络体系及协议模型介绍
  • 【Java】文件编辑器
  • ROS1/Linux——Launch文件使用
  • 【深度学习新浪潮】AI在finTech领域有哪些值得关注的进展?
  • STM32 IAR 生成工程后配置
  • CSP-S模拟赛三(仍然是难度远超CSP-S)
  • 【Java源码阅读系列55】深度解读Java Method 类源码
  • 78、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:栈指针和帧指针(下)
  • 股票行情接口api,板块、概念接口,股票主力资金流接口,板块概念资金流接口
  • 暑期自学嵌入式——Day05(C语言阶段)
  • 1-创建Vue3项目
  • Linux系统编程——进程间通信
  • 融智兴科技: RFID超高频洗涤标签解析
  • LeetCode--48.旋转图像
  • 快速了解网络爬虫
  • 设备驱动的私有数据设计
  • yocto开发(1)----bitbake的全流程分析
  • 指针数组和数组指针的应用案例
  • js对象简介、内置对象