
手把手教你用XPath抓隔壁老王的数据
搞爬虫的老铁们肯定遇到过这种场景:明明看着网页结构很清晰,真要定位元素时却像在迷宫转悠。特别是遇到表格数据、商品列表这种同辈元素扎堆的情况,XPath的同级定位技巧就是你的开山斧。
举个栗子,某电商网站的价格藏在class="price"的span里,但隔壁还有个迷惑人的class="fake-price"。这时候用following-sibling轴就能精准锁定真价格,就像在菜市场挑西瓜,得会拍着听声儿。
//div[@class='product']/span[@class='title']/following-sibling::span[1]
代理IP让爬虫稳如老狗
但光会XPath还不够,很多网站防爬虫比防贼还严。前两天有个做比价的小哥,连续请求20次就被封IP,急得直薅头发。这时候就该ipipgo的动态住宅代理上场了,它家的IP池比万达广场还大,每次请求随机换马甲,网站根本分不清是人是爬虫。
实战配置超简单(记得把username、password换成自己账号):
import requests
proxies = {
'http': 'http://username:password@gateway.ipipgo.com:9021',
'https': 'http://username:password@gateway.ipipgo.com:9021'
}
resp = requests.get('https://目标网站', proxies=proxies)
黄金搭档实战案例
假设要抓某票务网站的演出信息,页面结构是这样的:
| 元素 | 特征 |
|---|---|
| 演出名称 | h3标签+class=”event-title” |
| 演出时间 | 紧跟在名称后的第一个p标签 |
| 票价 | 第二个p标签里的span |
用XPath同级轴可以这样抓:
events = response.xpath('//div[@class="events-list"]/div')
for event in events:
name = event.xpath('.//h3/text()').get()
time = event.xpath('.//h3/following-sibling::p[1]/text()').get()
price = event.xpath('.//p[2]/span/text()').get()
配上ipipgo的按需计费套餐,设置5秒请求间隔,跑一晚上数据稳稳当当,比用免费代理少踩80%的坑。
常见翻车现场QA
Q:XPath定位老是空列表咋整?
A:先检查是不是元素加载延迟,用浏览器开发者工具复现定位。如果网站用了反爬,记得在请求头里加Referer和User-Agent,ipipgo的代理自带请求头伪装功能。
Q:代理IP突然连不上怎么办?
A:在代码里加个重试机制,ipipgo的API支持自动更换失效IP。要是频繁断连,建议切换成他们的长效静态住宅IP,稳定性堪比宽带拨号。
Q:动态网页怎么破?
A:上Selenium或者Playwright模拟浏览器,记得给每个浏览器实例配不同代理。ipipgo支持同时创建多个代理会话,完美解决多开窗口的IP冲突问题。
最后叨叨句,爬虫这活儿三分靠技术,七分靠代理。用过七八家代理服务,ipipgo在响应速度和失败重试机制上确实有东西,特别是他们家的IP存活检测API,能提前筛掉哑炮IP,省得程序跑一半卡壳。

