手把手教你用Python搞网页抓取
最近好些朋友问老张,想学爬虫但总被网站封IP怎么办?这事儿吧,就跟打游戏总被踢出房间一个道理。今儿咱就用大白话聊聊怎么用Python搞网页抓取,重点说说怎么用代理IP这个”隐身斗篷”。
准备你的工具箱
先装几个必备家伙事儿:
pip install requests beautifulsoup4
注意别用最新版本库,有些新版会有兼容问题。比如requests用2.25.1版更稳当。
初学者的第一段抓取代码
咱先整个简单例子,抓某电商网站价格:
import requests
from bs4 import BeautifulSoup
url = 'https://example.com/product'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
price = soup.find('span', class_='price').text
print(f"当前价格:{price}")
这么搞两次准被封,就跟在超市反复翻价签被保安盯上一个样。
代理IP的正确打开方式
这里就要请出咱的”隐身衣”——ipipgo的代理服务。他们家提供独享高速线路,比公共代理稳当多了。具体这么用:
proxies = {
'http': 'http://用户名:密码@gateway.ipipgo.com:端口',
'https': 'https://用户名:密码@gateway.ipipgo.com:端口'
}
response = requests.get(url, proxies=proxies, timeout=10)
注意把用户名密码换成自己在ipipgo后台拿到的凭证,别直接复制我这代码啊!
抓取高手必备技巧
1. IP轮换策略:别可着一个IP薅羊毛,ipipgo的API能动态获取IP
import random
def get_proxy():
proxy_list = ipipgo.get_proxy_list() 这里调用ipipgo的API
return random.choice(proxy_list)
2. 请求头伪装:给请求加点”化妆品”
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
常见问题急救包
Q:总提示连接超时咋整?
A:八成是代理不稳定,换ipipgo的独享线路试试,别用免费代理
Q:返回的数据是乱码?
A:记得设置response.encoding = ‘utf-8’,或者用chardet库自动检测
Q:怎么判断IP被封了?
A:看看返回状态码是不是403,或者网页内容里出现”访问过于频繁”这类提示
避坑指南
1. 别用time.sleep(1)这种固定间隔,改成random.uniform(1,3)更自然
2. 遇到验证码别硬刚,用ipipgo的高匿IP套餐能减少触发几率
3. 重要数据记得做本地缓存,别每次都重新抓
最后说句掏心窝的话:选代理服务就跟找对象似的,图便宜用免费代理,迟早要栽跟头。ipipgo我用了小半年,稳定性确实能打,特别是那个按量付费的套餐,对小项目特别友好。新手建议先用他们的体验套餐练手,熟悉了再上大流量。