Beautiful Soup爬取Ebay价格时USD自动转换为新台币问题求解
问题原因
eBay服务端会根据请求携带的请求头信息、IP归属地、Cookie配置自动适配返回的站点区域与计价币种,你直接通过默认配置的requests发起请求时,会被eBay判定为你当前所在的地区,因此返回NT$计价的结果,浏览器访问时因为有本地存储的地域、币种配置Cookie才会显示USD价格。
解决方案
你可以通过以下配置修正返回的币种:
- 给requests请求添加模拟浏览器的请求头,指定
Accept-Language为美国英语,避免eBay判定为非美区客户端,同时也能降低被反爬策略拦截的概率 - 在请求的eBay URL末尾追加
&gl=US¤cy=USD参数,强制指定站点区域为美国、计价币种为美元 - 如上述方法仍不生效,可在请求头中添加币种配置Cookie,强制锁定返回USD价格
修改后的参考代码如下:
import requests from bs4 import BeautifulSoup as bs # 配置自定义请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept-Language": "en-US,en;q=0.9", # 如需要可额外加Cookie配置 # "Cookie": "ebay=%26cur%3DUSD;" } # URL追加强制美区、美元参数 url = 'https://www.ebay.com/sch/i.html?_from=R40&_nkw=dodge+viper&_sacat=0&_sop=20&gl=US¤cy=USD' page = requests.get(url, headers=headers) soup = bs(page.content, 'html.parser') prices = soup.find_all('span', class_='s-item__price')
内容的提问来源于stack exchange,提问作者Matthew Yamamoto
相关产品推荐
相关产品推荐

