Python 3.6批量爬取:将文本列表编号替换至URL实现数据抓取
批量替换URL编号实现爬虫批量爬取方案
嘿,作为编程新手能拼出可运行的爬虫已经超棒啦!针对你想要用txt文件里的编号批量替换URL、实现批量爬取的需求,我帮你把代码调整得更完善,还加了一些新手友好的细节~
修正后的完整代码
from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup import datetime # 获取当前时间,生成唯一的结果文件名,避免覆盖旧数据 current_datetime = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") # 读取numbers.txt里的编号列表 # 自动过滤空行和编号前后的空格/换行,兼容每行一个编号或空格分隔的格式 with open("numbers.txt", "r", encoding="utf-8") as f: numbers = [num.strip() for num in f.readlines() if num.strip()] # 用with open自动管理文件,不用手动close,更安全 filename = f"results_{current_datetime}.csv" with open(filename, "w", encoding="utf-8") as f: headers = "titel##adresse##criteria##preis##energie##beschreibung##ausstattung##lage\n" f.write(headers) # 循环处理每个编号对应的URL for number in numbers: # 用f-string替换URL中的编号,比%格式化更直观 my_url = f"https://www.immobilienscout24.de/expose/{number}#/" print(f"正在爬取: {my_url}") try: # 访问目标URL并解析页面 uClient = uReq(my_url) page_html = uClient.read() uClient.close() page_soup = soup(page_html, "html.parser") # 你的页面解析逻辑,这里保留你原来的容器查找代码 containers = page_soup.find_all("div", { "class":"grid-item padding-desk-right-xl desk-two-thirds lap-one-whole desk-column-left flex-item palm--flex__order--1 lap--flex__order--1" }) # 这里要确保你已正确提取titel、adresse等字段,示例中加了空值判断避免报错 titel = containers[0].find("h1").text.strip() if containers else "无标题" adresse = containers[0].find("div", class_="address-block").text.strip() if containers else "无地址" # 其他字段(criteria、preis等)请根据你的实际解析逻辑补充 # 写入CSV文件 f.write(f"{titel}##{adresse}##{criteria.replace(' ', '; ')}##{preis.replace(' ', '; ')}##{energie.replace(' ', '; ')}##{beschreibung.replace('\n', ' ')}##{ausstattung.replace('\n', ' ')}##{lage.replace('\n', ' ')}\n") except Exception as e: # 捕获异常,避免单个URL出错导致整个脚本崩溃,同时记录错误信息 print(f"爬取{my_url}时出错: {str(e)}") f.write(f"爬取失败##{my_url}##错误信息: {str(e)}#######\n") print(f"批量爬取完成!结果已保存到{filename}")
关键细节说明
- 编号读取优化:用列表推导式过滤空行和多余空格,不管你的txt是每行一个编号还是空格分隔,都能正常读取有效编号。
- 异常处理:加入
try-except块,就算遇到无效编号、网络问题等情况,脚本也会继续处理下一个URL,还能把错误信息写入结果文件,方便后续排查。 - 文件安全操作:全程用
with open语法,Python会自动帮你关闭文件,避免忘记手动关闭导致的资源泄漏。 - 唯一文件名:用当前时间戳命名结果文件,多次运行脚本也不会覆盖之前的爬取结果。
把numbers.txt放在脚本同一个文件夹里,运行后就能自动批量爬取每个编号对应的页面啦~
内容的提问来源于stack exchange,提问作者Juli Goe
相关产品推荐
相关产品推荐

