网页爬取中如何使用for循环遍历多个URL?
批量爬取多个URL数据的实现方案
你当前的代码仅支持爬取单个URL的商品SKU信息,要实现批量爬取多个URL,只需要对核心逻辑做针对性修改,同时增加必要的异常处理保证稳定性。以下是修改后的完整代码及说明:
import datetime from bs4 import BeautifulSoup import requests def get_url_data_from_url_request(url): print(">>> get_url_data_from_url_request: " + str(url)) url_data = None headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" } s = requests.session() s.keep_alive = False try: request = s.get(url, proxies=None, headers=headers) print("request.status_code: ", request.status_code ) # 仅当请求成功时返回页面内容 if request.status_code == 200: url_data = request.text else: print(f"请求失败,状态码: {request.status_code}") except Exception as e: print(f"请求URL时出错: {str(e)}") finally: request.connection.close() s.close() return url_data def parse_sku_from_html(html_content): """从HTML内容中解析商品SKU""" if not html_content: return None try: soup = BeautifulSoup(html_content, "lxml") id_element = soup.find('span', {"itemprop": "sku"}) return id_element.text.strip() if id_element else "未找到SKU" except Exception as e: print(f"解析SKU时出错: {str(e)}") return None def main(): print("bdr.sandbox") generated_on = datetime.datetime.now() print(generated_on) # 定义要爬取的多个URL列表,替换成你的目标地址 source_product_urls = [ "https://example.com/product1", "https://example.com/product2", "https://example.com/product3" ] # 遍历每个URL,逐个处理爬取与解析 for url in source_product_urls: print(f"\n===== 开始处理URL: {url} =====") url_data = get_url_data_from_url_request(url=url) sku = parse_sku_from_html(url_data) print(f"最终获取SKU: {sku}") if __name__ == '__main__': main()
核心改动点
- 批量URL管理:新增
source_product_urls列表,集中存放所有目标URL,支持随时添加、删除或修改爬取地址 - 模块化拆分:将SKU解析逻辑独立为
parse_sku_from_html函数,分离数据获取与数据解析的职责,让代码结构更清晰 - 异常容错机制:在HTTP请求和HTML解析环节添加异常捕获,避免单个URL的爬取失败导致整个程序终止
- 请求有效性校验:仅当HTTP请求返回状态码200时,才继续解析页面内容,过滤无效响应数据
- 循环遍历处理:通过
for url in source_product_urls实现批量遍历,逐个完成每个URL的爬取与解析流程
内容的提问来源于stack exchange,提问作者nesqluck
相关产品推荐
相关产品推荐

