在爬取大众点评商铺信息时遇到反爬问题,Python中如何有效应对?
我在抓取大众点评中商铺信息的时候,当我使用动态切换 IP (使用的是阿布云 IP 代理的)抓取的时候,被重定向到验证码的页面,但是当我不使用 IP 代理的时候,返回正常的信息,是识别了动态代理 IP 了码?怎么识别的动态 IP,有方法绕过去吗?并且在抓取部分字段时,有的在网页中,但是有的只给了一个标签,里面什么内容都没有,如何破?
在爬取大众点评商铺信息时遇到反爬问题,Python中如何有效应对?
遇到大众点评的反爬,核心思路是模拟真实用户行为并处理动态内容。直接上代码,这里用 requests 配合 Selenium 处理动态加载,并用 BeautifulSoup 解析:
import time
import random
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
# 配置Selenium
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
driver = webdriver.Chrome(options=options)
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Referer': 'https://www.dianping.com/'
}
def crawl_shop_info(url):
try:
driver.get(url)
# 等待关键元素加载
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "shop-name"))
)
# 随机延迟模拟人工操作
time.sleep(random.uniform(1, 3))
# 获取页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')
# 解析店铺信息
shop_name = soup.find('h1', class_='shop-name').text.strip()
address = soup.find('span', class_='address').text.strip()
return {
'shop_name': shop_name,
'address': address
}
except Exception as e:
print(f"爬取失败: {e}")
return None
finally:
driver.quit()
# 使用示例
if __name__ == "__main__":
shop_url = "https://www.dianping.com/shop/xxx" # 替换为目标店铺URL
info = crawl_shop_info(shop_url)
print(info)
关键点说明:
- Selenium处理动态内容:大众点评很多数据是JS动态加载的,直接用requests获取不到完整页面
- 反自动化检测规避:通过ChromeOptions禁用自动化特征,避免被识别为爬虫
- 请求头设置:包含User-Agent、Referer等必要字段
- 随机延迟:在操作间加入随机等待时间,模拟真人浏览节奏
- 异常处理:确保程序在遇到问题时能优雅退出
如果数据量不大,可以考虑直接用Selenium搞定全部解析。如果需要高效爬取,可以先用Selenium获取页面源码,再用BeautifulSoup解析,避免频繁操作DOM影响速度。
注意控制请求频率,过快的访问容易被封IP。建议在循环爬取时加入 time.sleep(random.uniform(2, 5)) 这样的随机延迟。
总结:核心是模拟真人操作节奏。
注册几十个账号,每次用不同的账号请求+换 ip,之前爬 zillow 是这样绕过的
朋友,你有办法获取代理,凭什么大众点评的人没办法?
代理是不是无效的?测试过吗
最简单地策略,它直接识别所有已知云服务的 IP 段就行了,真正的用户一般不会从那边发起请求的…
IP 代理测试过,其他网站都可以
那有其他解决方法绕过去吗,
点评网连正常用户访问都要频繁填验证码
那是绝了
我之前爬的时候记得好像要根据 ua 生成 cookie 的
有防御策略是根据 IP 库来的,IDC 的 IP 段一般是不被信任的。你能找到的代理地址,可能也是在不被信任列表的。
chrome 开无痕模式,直接访问商铺详情页,返回为空,如果先访问主页在访问商铺详情页,返回是正常的,这是根据 cookie 做反爬的吗?,没有登录时候 cookie 是如何变化的,通过 js ?
和美团一样,爬的时候必须先去首页获取一次 cookie,应该只有 5 分钟左右有效期,但我遇到的问题是 100 次访问后就被检测出来,返回垃圾数据,不知道触发了什么
你用公用的 ip 代理, 其他人也会用. 自然会落到大型网站的 blacklist 中.
将 IP 池筛一下,把不能访问你想要爬的网站的 IP 筛掉
楼主解决了吗?我用代理也是这样,我自己搞了一个 cookie 池,cookie 应该不是出问题的原因,换代理就出 302
难道会验证 ip 和 cookie 绑定?


