Python:运⽤selenium爬取下拉框数据《中国省市县地区代码
表》
最近看李永乐⽼师的⼀期视频,讲解中国⾝份证号每个数字的含义。
得知⾝份证的前六位数字,分别代表省-市-县/区。
由此想⼀份 中国省市县地区代码表,发现⼀个⽹址⾃动⽣成⾝份证号,内含代码表。
下拉框数据没有爬取过,便尝试并学习下。
中国城乡代码格式详解
第1-2位表⽰省(⾃治区、直辖市、特别⾏政区)。
第3-4位表⽰市(地级市、⾃治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表⽰省直辖市;21-50表⽰地区(⾃治州、盟)。
第5-6位表⽰县(市辖区、县级市、旗)。01-18表⽰市辖区或地区(⾃治州、盟)辖县级市;21-80表⽰县(旗);81-99表⽰省直辖县级市。
1. ⽹页分析。地址选择有 省--province;市/州--city;县/区--country。
都包含在 'select' 下,每⼀个option都有对应的 value值 和 选择项内容。
以下为主程序。⾸先使⽤selenium模拟启动chrome浏览器,打开⽹页,再模拟点击选择动作,每获取⼀条省-市-区的数据,存⼊DataFrame中。其中选择顺序为,先选省再选市最后选区县,该市管辖的区县选完再换市,当该省管辖的市选⼴域完再换省。
selenium  怎么定位 select 框,选择 select ⾥的选项
s1 = Select(browser.find_element_by_id('province'))  # 实例化Select
s1.select_by_index(2)  # 选择第2项选项
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdrivermon.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.select import Select
from selenium.webdriver.support import expected_conditions as EC
import urllib3
urllib3.disable_warnings()
def main():
# 创建dataframe
chain_ID = pd.DataFrame(columns=['province_code', 'province',
'city_code', 'city',
'county_code', 'county'])
print('模拟打开浏览器')
browser = brower()
# 省
print('获取 ‘省’ 信息')
s_province = Select(browser.find_element_by_id('province'))  # 实例化Select
for i in range(1, len(s_province.options)):
province_code, province_name = get_text(browser, i, s_province, 'province')
# 城市
print('获取 ‘市’ 信息')
s_city = Select(browser.find_element_by_id('city'))
for j in range(1, len(s_city.options)):
city_code, city_name = get_text(browser, j, s_city, 'city')
# 县/区
print('获取 ‘县/区’ 信息')
s_county = Select(browser.find_element_by_id('county'))
for k in range(1, len(s_county.options)):
county_code, county_name = get_text(browser, k, s_county, 'county')
data_save = [province_code, province_name, city_code, city_name, county_code, county_name]                n = (i-1)*50 + (j-1)*500 + k
chain_ID.loc[n] = data_save
_csv('2019年中国省市县地区代码.CSV', index=0, encoding='utf_8_sig')
下拉框点击动作必须由 selenium来执⾏,设置⽆界⾯模式。
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
def brower():
# 设置chrome浏览器
chrome_options = Options()
# 设置chrome浏览器⽆界⾯模式
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
# 打开⽹页
start_url = 'www.tiebazhushou/index/id.html'
# 'www.ip33/area_code.html'
selenium怎么使用
<(start_url)
return browser
定位 select 框选项, 并获取当前选择的  省名/市名/区县名  及对应代码。
def get_text(browser, i, s_area, area_str):
s_area.select_by_index(i)  # 选择第i项选项
area_value = get_value(browser, area_str)
area = []
for select in s_area.options:
area.)
return area_value, area[i]
获取当前选择框的 value值。
from selenium.webdrivermon.by import By
from selenium.webdriver.support.wait import WebDriverWait
def get_value(browser, region):
wait = WebDriverWait(browser, 3)
option = wait.until(EC.presence_of_element_located((By.ID, region)))
option_value = _attribute('value')
return option_value
爬取完毕,再次⽹上搜索代码表时, 却发现  这个⽹址整整齐齐的罗列我想要的数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。