爬取亚马逊页面商品标题与图片URL的Python脚本用了哪些库?请解析代码
爬取亚马逊商品标题和图片URL的Python库及代码解析
核心依赖库
爬这类静态页面,常用的几个库如下:
- requests:负责向亚马逊服务器发送HTTP请求,获取目标页面的HTML源码,是Python爬虫最基础的请求工具。
- BeautifulSoup4:用来解析HTML文本,通过标签、id、class等定位我们需要的元素,上手门槛低,适合新手处理静态页面。
- fake_useragent(可选但强烈推荐):生成随机的User-Agent字符串,模拟不同浏览器的请求,避开亚马逊基础的反爬拦截。
示例爬取脚本及详细解析
下面是一个可运行的典型脚本,针对亚马逊商品页面提取标题和主图URL:
from fake_useragent import UserAgent import requests from bs4 import BeautifulSoup import time # 替换为你要爬取的亚马逊商品链接 PRODUCT_URL = "https://www.amazon.com/dp/B0C1XKZ7Y6" def scrape_amazon_product_details(url): # 生成随机请求头,伪装浏览器身份 ua = UserAgent() headers = { "User-Agent": ua.random, "Accept-Language": "en-US,en;q=0.9" } try: # 发送GET请求,添加短间隔避免触发反爬 time.sleep(2) response = requests.get(url, headers=headers) # 检查请求是否成功(比如403、500这类错误会直接抛出异常) response.raise_for_status() # 初始化HTML解析器 soup = BeautifulSoup(response.text, "html.parser") # 提取商品标题:亚马逊商品标题的id通常是productTitle product_title = soup.find(id="productTitle").get_text(strip=True) # 提取主图URL:主图元素的id一般是landingImage,取src属性 main_image_url = soup.find(id="landingImage")["src"] return { "title": product_title, "main_image_url": main_image_url } except Exception as e: print(f"爬取失败: {str(e)}") return None # 执行爬取并输出结果 if __name__ == "__main__": result = scrape_amazon_product_details(PRODUCT_URL) if result: print(f"商品标题: {result['title']}") print(f"主图URL: {result['main_image_url']}")
逐行解析
库导入:
from fake_useragent import UserAgent:导入生成随机UA的工具,用来绕过亚马逊的UA检测。import requests:导入请求库,负责和亚马逊服务器建立连接并获取页面内容。from bs4 import BeautifulSoup:导入HTML解析器,用来从杂乱的HTML里精准提取目标内容。import time:用来添加请求间隔,降低被封IP的风险。
常量定义:
PRODUCT_URL:替换成你要爬的具体商品页面链接,这里用的是示例链接。
爬取函数逻辑:
- 请求头构建:
ua.random生成随机UA,Accept-Language设置为英文,模拟正常海外用户的请求,减少被拦截概率。 - 请求发送:
time.sleep(2)添加2秒间隔,避免短时间内多次请求触发反爬;requests.get()发送GET请求,response.raise_for_status()会在请求返回错误状态码时抛出异常,方便排查问题。 - HTML解析:
BeautifulSoup(response.text, "html.parser")把获取到的HTML文本交给解析器处理,html.parser是Python内置的解析器,不需要额外安装(如果追求速度可以用lxml,需要单独安装)。 - 标题提取:
soup.find(id="productTitle")通过元素的id定位标题容器,.get_text(strip=True)去除文本前后的空格、换行符,得到干净的标题内容。 - 图片URL提取:
soup.find(id="landingImage")["src"]定位主图元素,取其src属性值,就是图片的直接访问链接。 - 异常处理:用
try-except捕获请求失败、元素找不到等所有可能的错误,打印错误信息并返回None,避免程序直接崩溃。
- 请求头构建:
主程序执行:
if __name__ == "__main__":确保只有直接运行脚本时才执行爬取逻辑。- 调用函数并输出结果:如果爬取成功,就打印标题和图片URL;失败则会输出错误信息。
关键注意事项
- 亚马逊反爬严格:频繁请求会被封IP,建议增加请求间隔(比如3-5秒),或者使用代理IP池。
- 页面结构可能变化:如果某天发现提取不到内容,要检查亚马逊页面的元素id/class是否更新了(可以用浏览器的开发者工具查看)。
- 合规性:爬取前要查看亚马逊的
robots.txt,不要用于商业用途,避免法律风险。
内容的提问来源于stack exchange,提问作者mashoodsheikh
相关产品推荐
相关产品推荐

