循环生产url链接,到第十页结束

该代码片段展示了如何使用Python的for循环和range函数生成一系列URL,用于访问豆瓣电影Top250列表的不同部分。
for i in range(0, 10):
    i = 25*i
    print(f'https://movie.douban.com/top250?start={i}&filter=')
在使用 Python 进行网数据抓取时,经常会遇到分内容(例如搜索结果、商品列表等),需要自动跳转到下一并持续抓取数据。实现“自动跳转到下一”的多爬虫代码通常依赖于以下几种方式之一: - 基于 **下一按钮的 URL 链接** 循环请求 - 基于 **码参数构造 URL** - 基于 **Ajax 动态加载 + 翻接口** - 使用 **Selenium 模拟浏览器点击“下一”按钮** 下面是一个通用的、使用 `requests` 和 `BeautifulSoup` 实现的多自动跳转爬虫示例,适用于静态 HTML 分网站(比如每 URL 为 `?page=1`, `?page=2`)。 ```python import requests from bs4 import BeautifulSoup import time def scrape_multiple_pages(start_url, max_pages=5): """ 自动跳转并抓取多内容 :param start_url: 起始URL(应包含码占位符 {page} 或可拼接) :param max_pages: 最大翻数(防止无限爬取) """ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } page_num = 1 while page_num <= max_pages: # 方法1:如果 URL 是 https://example.com/page1, page2... # url = f"https://example.com/page{page_num}" # 方法2:如果起始 URL 支持 ?page= 参数 url = f"{start_url}&page={page_num}" if '?' in start_url else f"{start_url}?page={page_num}" print(f"正在抓取: {url}") try: response = requests.get(url, headers=headers, timeout=10) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') # 提取当前内容(示例:提取标题) titles = soup.find_all('h2', class_='title') # 根据实际网结构调整选择器 if not titles: print("未找到内容,可能已到最后一") break for i, title in enumerate(titles, 1): print(f"{(page_num - 1) * 10 + i}. {title.get_text(strip=True)}") # 检查是否存在“下一链接(可用于动态判断是否继续) next_button = soup.find('a', text='下一') or soup.find('a', {'rel': 'next'}) if not next_button and len(titles) == 0: print("没有更多面,停止爬取") break page_num += 1 time.sleep(1) # 尊重网站,避免频繁请求 except requests.RequestException as e: print(f"请求失败: {e}") break except Exception as e: print(f"解析出错: {e}") break # 示例调用(请替换为目标网站的实际基础 URL) scrape_multiple_pages("https://example.com/search?q=python", max_pages=10) ``` ### 解释: 1. **requests**:用于发送 HTTP 请求获取网内容。 2. **BeautifulSoup**:解析 HTML 并提取所需数据。 3. **循环控制码**:通过 `page_num` 变量递增模拟翻。 4. **终止件**: - 达到最大数; - 请求失败; - 内容为空或无“下一”按钮。 5. **反爬策略**:添加 User-Agent、设置延时。 > ⚠️ 注意事项: > - 实际项目中需根据目标网站结构修改 CSS 选择器。 > - 遵守 `robots.txt`,不要高频请求。 > - 若网站使用 JavaScript 渲染,需改用 Selenium 或 Playwright。 --- 如果你面对的是 **JavaScript 渲染的面**,可以使用 Selenium 实现真实点击“下一”按钮: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time def scrape_with_selenium(start_url, max_pages=5): options = webdriver.ChromeOptions() options.add_argument("--headless") # 无头模式,可选 driver = webdriver.Chrome(options=options) try: driver.get(start_url) for page in range(max_pages): print(f"正在抓取第 {page + 1} ") # 示例:提取内容 titles = driver.find_elements(By.CSS_SELECTOR, "h2.title") for i, title in enumerate(titles): print(f"{page * 10 + i + 1}. {title.text}") try: next_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "下一")) ) next_button.click() time.sleep(2) # 等待面加载 except: print("无法找到下一按钮,结束") break finally: driver.quit() # 调用示例 scrape_with_selenium("https://example.com/list") ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值