You need to enable JavaScript to run this app. PyCharm Python爬取locatefamily印度街列全页数据及文件导出的方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm Python爬取locatefamily印度街列全页数据及文件导出的方法咨询

原代码失效核心原因
  • 分页URL拼接逻辑错误:直接在index.html后缀后拼接数字,生成的链接为index.html1、index.html2这类无效地址,实际站点分页规则为第一页index.html,后续页面为index_2.html、index_3.html格式
  • 请求缺少常规请求头:裸requests请求的默认User-Agent会被站点反爬规则拦截,多数请求返回403状态或空响应
  • 异常处理逻辑错位:time.sleep(30)写在continue语句之后,触发异常时会直接跳过休眠逻辑,高频请求极易触发IP封禁
  • 元素提取逻辑错误:默认定位p标签提取文本,但列表条目下多数有效文本不存在于p标签中,直接提取会触发空值报错
  • 无数据导出逻辑:爬取的数据仅在控制台打印,未落地为CSV或TXT文件
修正后可稳定运行的完整代码
from bs4 import BeautifulSoup
import requests
import time
import csv

# 构造合规分页链接
base_url = "https://www.locatefamily.com/Street-Lists/India/"
page_list = [base_url + "index.html"]
for i in range(2, 60):
    page_list.append(base_url + f"index_{i}.html")

# 配置常规浏览器请求头,绕过基础反爬校验
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}

street_data = []
for idx, page in enumerate(page_list):
    try:
        resp = requests.get(page, headers=headers, timeout=10)
        resp.encoding = resp.apparent_encoding
        soup = BeautifulSoup(resp.text, 'html.parser')
        # 定位所有街道列表条目
        items = soup.find_all('div', {'class': 'list-group-item'})
        print(f"正在爬取第{idx+1}页,获取到{len(items)}条有效数据")
        for item in items:
            # 提取条目全量有效文本,避免空标签报错
            clean_text = item.get_text(strip=True, separator=" ")
            street_data.append(clean_text)
        # 每爬完一页固定间隔1.5秒,降低请求频率
        time.sleep(1.5)
    except Exception as e:
        print(f"第{idx+1}页爬取出错:{str(e)}")
        # 异常触发时休眠20秒再继续,避免触发反爬封禁
        time.sleep(20)
        continue

# 导出CSV文件,带BOM头确保Excel打开无中文乱码
with open("india_street_list.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["印度街道列表条目内容"])
    for row in street_data:
        writer.writerow([row])

# 同步导出TXT记事本文件
with open("india_street_list.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(street_data))

print(f"全量爬取完成,共获取{len(street_data)}条数据,已保存为CSV和TXT文件")
运行注意事项
  • 如果运行过程中连续出现403响应,可将单页爬取间隔从1.5秒调整为3-5秒,降低请求频率
  • 若站点实际总页数不足59页,代码会自动跳过不存在的无效分页链接,不会影响有效页面的数据采集
  • 导出的CSV文件默认使用utf-8-sig编码,直接用Excel打开不会出现中文或特殊字符乱码

内容的提问来源于stack exchange,提问作者samsung galaxy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 19:06:01