爬取天气网 http://www.weather.com.cn 乡镇编码
暂且只完成固定省份,可自行扩展到全国
尚存 bug, 仅做参考
from time import sleep from selenium import webdriver #[https://npm.taobao.org/mirrors/chromedriver/](https://npm.taobao.org/mirrors/chromedriver/) #下载与浏览器对应的平台和版本 (本文采用版本号:75.0.3770.8) chromepath = "~/Downloads/chromedriver" driver = webdriver.Chrome(executable_path=chromepath); # 最终结果 resultFile = r"~/Downloads/resultSuccess.sql" # 事先新建数据 把需要查找的乡镇名称列表放入resultFailed.sql # 运行完成后 自行查看resultFailed.sql 以及日志 对相应行作出修正 badResultSqlFile = r"~/Downloads/resultFailed.sql" townNames = [] resultSql = [] badResultSql = [] def readFile(): reader = open('~/Downloads/resultFailed.sql') #文件resultFailed.sql格式:其中'' 为天气编码字段 #INSERT INTO `dict_def` VALUES (1002, '行政区划', 1004, '乡镇', '350102001000', '鼓东街道', '', '350102000000'); #INSERT INTO `dict_def` VALUES (1002, '行政区划', 1004, '乡镇', '350102002000', '鼓西街道', '', '350102000000'); #INSERT INTO `dict_def` VALUES (1002, '行政区划', 1004, '乡镇', '350102003000', '温泉街道', '', '350102000000'); #INSERT INTO `dict_def` VALUES (1002, '行政区划', 1004, '乡镇', '350102004000', '东街街道', '', '350102000000'); #INSERT INTO `dict_def` VALUES (1002, '行政区划', 1004, '乡镇', '350102005000', '南街街道', '', '350102000000'); #INSERT INTO `dict_def` VALUES (1002, '行政区划', 1004, '乡镇', '350102006000', '安泰街道', '', '350102000000'); lines = reader.readlines() for i in lines: townNames.append({'name': i.split("\'")[7], 'sql': i}) def getCode(): driver.get("http://forecast.weather.com.cn/town/weather1dn/101230101017.shtml#input") sleep(1) for i in townNames: num = '' try: driver.refresh() except Exception: #一般为网络状况差,导致刷新超时 print(i['name'] ,'' ,'没有找到1->页面刷新异常') badResultSql.append(i) continue driver.find_element_by_xpath("//*[@id='txtZip']").clear() driver.find_element_by_xpath("//*[@id='txtZip']").send_keys(i['name']) # 输入搜索内容 try: #可以根据网络状况,自行削减时间 sleep(2) li_list = driver.find_elements_by_xpath("//*[@id='txtZip']/../following-sibling::div[2]/ul/li") if len(li_list) <= 0: print(i['name'], '', '没有找到2->不存在') badResultSql.append(i) continue for x in li_list: if "福建" in x.text: num = x.get_attribute('num') break except Exception: print(i['name'] ,'' ,'没有找到3->未知异常') badResultSql.append(i) continue result = i['sql'].replace("''", "\'" + num + "\'") resultSql.append(result) print(result) def writeFile(): fp = open(resultFile, 'a+') fp.write('\n'.join(resultSql)) fp.close() fp = open(badResultSqlFile, 'w+') fp.write('\n'.join(badResultSql)) fp.close() if __name__ == '__main__': readFile() getCode() writeFile()
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于