Python爬虫抓取企业名录仅返回首个电话号码如何获取全部
问题核心原因
你使用的Python字符串find()方法只会返回第一个匹配内容的起始索引,因此只能提取到页面里第一个电话号码。要获取页面全部匹配的号码,直接用正则匹配所有符合规则的内容即可,修改成本很低。
修改后完整代码
from requests import get import re def starting(): keyword = input("Suchbegriff: ") URL = f"https://www.herold.at/gelbe-seiten/{keyword}/" print("Targeting... : " + URL) # 加请求头模拟浏览器,避免被网站反爬拦截 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" } data = get(URL, headers=headers) # 正则匹配所有tel:开头的电话号码,规则是匹配双引号包裹的tel:+数字内容 tel_list = re.findall(r'"tel:(\+[\d]+)"', data.text) # 去重后输出,避免同一个号码重复抓取 tel_list = list(set(tel_list)) for index, tel in enumerate(tel_list, 1): print(f"第{index}个企业电话:{tel}") if __name__ == "__main__": starting()
修改说明
- 引入了Python自带的
re正则模块,re.findall()会返回页面所有符合匹配规则的结果,自动遍历全文不需要手动循环查找 - 匹配规则
r'"tel:(\+[\d]+)"'只会提取双引号里tel:后面的纯号码内容,不会带多余的字符 - 增加了
set()去重逻辑,避免同一个企业的电话在页面多个位置重复出现 - 新增了浏览器UA请求头,降低被网站判定为爬虫拦截的概率
内容的提问来源于stack exchange,提问作者Leander
相关产品推荐
相关产品推荐

