Python爬虫练习一:爬取国家统计局 2016年统计用区划代码和城乡划分代码

    目标网址:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/index.html

    爬取所有市级的统计用区划代码和区级、县级的url(即目标网页第二层链接的内容全部爬取),区级、县级及以下的区划代码没有爬取。

    网站构造比较简单,容易爬取成功。

import requests
from bs4 import BeautifulSoup
aimurl="http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/index.html"#爬虫目标网址

#输入网址 获得网页的soup
def getsoup(url):
   res=requests.get(url) #以get方法访问目标网址获取网页信息
   res.encoding= 'gb2312'#该网页是以gb2312的编码形式显示的
   soup=BeautifulSoup(res.text, 'html.parser')#使用美丽汤解析网页内容
   return soup

#输入一级soup 获得二层网址和省、直辖市的名称 以list存储
def getsecondhtml(soup):
    secondhtml = []  # 存放二级网址
    province = []#存放省、直辖市的名称
    for provincetr in soup.select('.provincetr a'):#观察目标网页构造发现想要获取的内容在class provincetr的 a 下
        secondhtml.append("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/" + provincetr['href'])
        province.append(provincetr.text)
    return secondhtml,province

#输入list形式网址,以list获得网址的soup
def getlistsoup(listhtml):
    listsoup = []
    for html in listhtml:
        listsoup.append(getsoup(html))
    return listsoup

#输入二层列表soup,输出二层统计用区划代码和名称,和第三层的url
def gettext2(listsoup2th):
    text = []
    url = []
    for soup2 in soup2th:
        temptext = []
        tempurl = []#重复一次 因为统计用区划代码与名称都有链接且是相同的 所以要去除一个
        ttempurl = []
        for temp in soup2.select('.citytr a'):
            temptext.append(temp.text)
            tempurl.append("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/"+temp['href'])
        text.append(temptext)
        ttempurl=tempurl[0:-1:2]#去除一个
        url.append(ttempurl)
    return text,url


firstsoup = getsoup(aimurl)#获得首页的soup
(secondhtml,province)=getsecondhtml(firstsoup)#获得第二层市级的html和省直辖市名称
soup2th=getlistsoup(secondhtml)#获得第二层市级统计用区划代码的soup
(text2,url3)=gettext2(soup2th)#获得第二层市级统计用区划代码与名称和第三层的url

结果展示代码(初学python 写的很烂):

for i,j,p in zip(province,text2,url3):
    print(i)
    n=0
    flag=0
    for k in j:
        flag=flag+1
        print(k,end='   ')
        if flag==2:
            flag=0
            print(p[n])
            n=n+1
    print()

输出结果:

北京市
110100000000   市辖区   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/11/1101.html


天津市
120100000000   市辖区   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/12/1201.html


河北省
130100000000   石家庄市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1301.html
130200000000   唐山市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1302.html
130300000000   秦皇岛市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1303.html
130400000000   邯郸市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1304.html
130500000000   邢台市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1305.html
130600000000   保定市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1306.html
130700000000   张家口市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1307.html
130800000000   承德市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1308.html
130900000000   沧州市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1309.html
131000000000   廊坊市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1310.html
131100000000   衡水市   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1311.html
139000000000   省直辖县级行政区划   http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/13/1390.html

猜你喜欢

转载自blog.csdn.net/weixin_41710905/article/details/80496605