一、网络爬虫介绍
网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,它能够高效地从海量网页中提取有价值的数据。作为数据采集的利器,爬虫技术在数据分析、搜索引擎、价格监控等领域有着广泛应用。本文将带你全面了解Python网络爬虫的开发。
robots.txt规则
robots.txt 是网站与网络爬虫沟通的标准协议文件,它规定了哪些内容可以被爬取,哪些应该被禁止。作为爬虫开发者,理解并遵守 robots.txt 规则是合法合规爬取的基础。
通过在网站后加上robots.txt就可以查看当前网站的robots规则
完全开放
User-agent: * Disallow:
完全禁止
User-agent: * Disallow: /
部分限制
User-agent: * Disallow: /admin/ Disallow: /private/ Allow: /public/ Crawl-delay: 2
针对特定爬虫
User-agent: Googlebot Disallow: /nogoogle/ User-agent: * Disallow: /noothers/
掌握robots.txt规则是每个爬虫开发者的必修课。通过合理遵守这些规则,我们既能获取所需数据,又能维护良好的网络生态。记住,负责任的爬虫开发是技术可持续发展的基础。
二、requests库
requests 是 Python 中最流行的 HTTP 客户端库,以其简洁优雅的 API 设计著称。本文将全面介绍 requests 库的使用方法和最佳实践。
1、安装requests库
在开始之前,确保你已经安装了requests库。如果尚未安装,可以通过pip轻松安装:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
2、网页的源代码
如果通常我们想获取网页的内容我们是查看页面里的内容,但是我们使用代码去获取资源时就需要用到网页的源代码。
我们通过右击网页空白处点击查看源代码选项
但是通过这种方法无法获得全部信息,通过JavaScript脚本语言可以查看更多信息。
点击检查选项可以查看到脚本代码
3、获取网页资源
- get()函数
requests.get(url, params=None, **kwargs)
url |
请求的 URL(必需) |
params |
查询参数字典或字节序列,会自动附加到 URL |
**kwargs |
其他可选参数(headers, timeout, auth 等) |
import requests
response = requests.get('https://api.github.com')
print(response.status_code) # 打印状态码
print(response.text) # 打印响应内容
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # 查看实际请求的URL
response.status_code |
HTTP 状态码 |
response.text |
响应内容(字符串形式) |
response.content |
响应内容(字节形式) |
response.json() |
将 JSON 响应解析为 Python 对象 |
response.headers |
响应头字典 |
response.cookies |
响应 cookies |
response.elapsed |
请求耗时 |
response.raise_for_status() |
如果请求失败(状态码非200),抛出异常 |
- post()函数
requests.post(url, data=None, json=None, **kwargs)
参数 | 说明 |
---|---|
url |
请求的目标 URL(必需) |
data |
表单数据(字典、字节或文件对象) |
json |
JSON 可序列化的 Python 对象 |
**kwargs |
其他可选参数(headers, files, auth 等) |
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.status_code)
print(response.json()) # 查看服务器返回的JSON响应
三、selenium库
Selenium 是一个能让你「用代码操作浏览器」的开源工具。
常见用途:
自动化功能测试
重复性任务脚本(抢票、签到、填表)
抓取需要执行 JS 的页面数据
1、环境搭建
安装 Python(https://www.python.org 下载 3.7+)。
安装 Selenium
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
Chrome内核的浏览器
Chrome 驱动镜像:CNPM Binaries Mirror把解压后的
chromedriver.exe
放到
– 任意目录,并记录路径;或
– 直接丢进 Python 安装目录的Scripts
文件夹(已在系统 Path 中)。
2.验证:命令行输入 chromedriver
不报错就 OK。
4. Edge内核的浏览器
驱动版本必须与 Edge 浏览器版本一致。
下载后解压,得到
msedgedriver.exe
(建议重命名为edgedriver.exe
方便记忆)。
在浏览器的关于浏览器选项就可以看到浏览器的内核版本、
2、驱动浏览器
在selenium库中通过以下代码可以查看支持的浏览器类型
webdriver.浏览器类型名()
通过以上方法我们也可以加载浏览器的驱动使用形式如下如下
webdriver.浏览器类型名(
executable_path,options,service,keep_alive
)
executable_path |
指定驱动路径 | webdriver.Chrome(executable_path='chromedriver.exe') |
||
options |
浏览器选项对象 | webdriver.Chrome(options=chrome_options) |
||
service |
驱动服务配置 | webdriver.Chrome(service=service) |
||
keep_alive |
保持连接 | webdriver.Chrome(keep_alive=True) |
||
服务配置参数
from selenium import webdriver
# 基本初始化
driver = webdriver.Chrome()
# 带选项初始化
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless') # 无头模式
chrome_options.add_argument('--disable-gpu') # 禁用GPU加速
chrome_options.add_argument('--window-size=1920x1080') # 设置窗口大小
driver = webdriver.Chrome(options=chrome_options)
通过以下方法就可以的读取浏览器内容
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 方案 A:驱动已加入 PATH
driver = webdriver.Edge()
# 方案 B:手动指定驱动路径(取消下一行注释)
# driver = webdriver.Edge(executable_path=r"C:\path\to\edgedriver.exe")
driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("Edge Selenium", Keys.RETURN)
time.sleep(3)
driver.save_screenshot("baidu_result.png")
driver.quit()
send_keys()
是 Selenium WebDriver 中用于向网页元素输入内容的核心方法,主要用于文本框、文本域等可输入元素的交互操作。
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.example.com/login")
# 定位用户名输入框并输入文本
username = driver.find_element(By.ID, "username")
username.send_keys("testuser")
# 定位密码输入框并输入文本
password = driver.find_element(By.NAME, "password")
password.send_keys("securepassword123")
from selenium.webdriver.common.keys import Keys
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("selenium") # 输入文本
search_box.send_keys(Keys.RETURN) # 模拟回车键
Keys.RETURN |
回车键 | element.send_keys(Keys.RETURN) |
Keys.TAB |
Tab键 | element.send_keys(Keys.TAB) |
Keys.ESCAPE |
Esc键 | element.send_keys(Keys.ESCAPE) |
Keys.BACK_SPACE |
退格键 | element.send_keys(Keys.BACK_SPACE) |
Keys.CONTROL |
Ctrl键 | element.send_keys(Keys.CONTROL + 'a') |
Keys.SHIFT |
Shift键 | element.send_keys(Keys.SHIFT + 'hello') |
Keys.ARROW_UP |
上箭头 | element.send_keys(Keys.ARROW_UP) |