Python爬虫经常爬不到数据,可能由多种原因导致,以下是一些常见情况及对应的解决办法:
最简单的爬虫方式未成功import requestsurl = "目标网址"headers = { "User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}response = requests.get(url, headers=headers)if response.status_code == 200: data = response.text print(data)else: print("请求失败,状态码:", response.status_code)数据不在网页源代码中import requestsurl = "包含数据的JSON接口网址"headers = { "User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}response = requests.get(url, headers=headers)if response.status_code == 200: json_data = response.json() print(json_data)else: print("请求失败,状态码:", response.status_code)动态加载且请求复杂的数据- 问题表现:像网易云音乐这类网站,虽然在Network下面能找到相应数据,但数据是通过post请求获取,请求过程较为复杂,使用前面的方法难以爬取。
- 原因分析:post请求通常需要携带特定的参数、请求头等信息,而且可能涉及到会话管理、验证码等反爬机制,简单的get请求无法满足需求。
- 解决办法:使用selenium模块。selenium可以模拟浏览器行为,自动处理页面加载、JavaScript执行、点击等操作,适用于动态加载且请求复杂的网页数据爬取。
- 示例代码框架:
from selenium import webdriverfrom selenium.webdriver.common.by import By# 创建浏览器驱动对象,这里以Chrome为例,需要提前下载对应版本的ChromeDriverdriver = webdriver.Chrome()# 打开目标网页driver.get("目标网址")# 通过元素定位方式找到包含数据的元素,例如通过ID、类名等# 这里只是示例,实际需要根据网页结构调整element = driver.find_element(By.ID, "元素ID")data = element.textprint(data)# 关闭浏览器driver.quit()其他可能原因及解决办法import requestsurl = "目标网址"proxies = { "http": "http://代理IP:端口", "https": "https://代理IP:端口"}response = requests.get(url, proxies=proxies)if response.status_code == 200: data = response.text print(data)else: print("请求失败,状态码:", response.status_code)