User-Agent伪装动态修改请求头中的User-Agent字段,模拟不同浏览器或设备的访问行为。常见做法是从预定义的User-Agent列表中随机选择,或使用第三方库如
fake_useragent自动生成。
www.gzad.netAAA
IP代理池高频访问同一目标网站易触发IP封禁。可通过付费代理服务或自建代理池实现IP轮换。推荐使用
requests库结合代理IP:
proxies = {"http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"}
requests.get("http://example.com", proxies=proxies)
验证码处理
pytesseract库进行OCR识别
selenium模拟拖动操作
请求频率控制
time.sleep(random.uniform(1,3))
无头浏览器方案使用
selenium或
playwright控制浏览器渲染动态内容:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
dynamic_content = driver.page_source
API逆向工程通过浏览器开发者工具分析XHR请求:
WebSocket监听对实时更新的数据流,可使用
websockets库建立长连接:
import websockets
async with websockets.connect('wss://example.com') as ws:
await ws.send('{"action":"subscribe"}')
response = await ws.recv()
动态元素定位
driver.find_element_by_css_selector('#content')
//div[@class="result"]/text()
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,"results")))
JavaScript渲染对需要执行JS的页面,使用
pyppeteer(Puppeteer的Python移植版):
import asyncio
from pyppeteer import launch
async def scrape():
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com')
content = await page.content()
指纹混淆通过
selenium-stealth等库修改浏览器指纹特征:
from selenium_stealth import stealth stealth(driver, languages=["en-US", "en"], vendor="Google Inc.", platform="Win32" )
行为模式模拟
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
分布式架构 www.xedzrmtj.comAAA
scrapy-redis搭建分布式爬虫
请求日志记录
import logging
logging.basicConfig(filename='spider.log', level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info(f"Requesting {url} with headers {headers}")
性能监控
memory_profiler分析内存使用
www.hbrtsykj.comAAAcProfile检测函数耗时
异常处理机制 www.detygg.cnAAA
try: response = requests.get(url, timeout=10) except requests.exceptions.RequestException as e: if isinstance(e, requests.exceptions.Timeout): implement_retry_strategy() elif e.response.status_code == 429: adjust_request_rate()
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69921553/viewspace-3103021/ ,如需转载,请注明出处,否则将追究法律责任。