爬虫练习2:爬取省市信息(增加地址信息)
爬取思路:
1、获取网页信息
2、爬取省市信息,存到列表(增加城市信息地址获取)
3、打印输出列表中的数据
点击查看代码
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
# 抓取数据,存到列表
def fillCityList(clist, html,baseURL):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('table').children:
if isinstance(tr, bs4.element.Tag):
# 查找tr标签中的td标签,等同于tds = tr.find_all('td')
tds = tr('td')
# 查找第二个td标签中的a标签,并获取a标签属性为href的值,即为相对网址
cURL = tds[1].find('a').attrs.get('href')
#一级网址加上相对网址几位绝对网址
cityURL = baseURL + cURL
clist.append([tds[0].string, tds[1].string, tds[2].string,cityURL])
# 打印和输出数据
def printCityList(clist, num):
tplt = "{0:^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}\n"
if num > 34 :
print ('\n省市数量的最大值为34,请重新执行!~~\n')
else :
# 打印并输出到文件,行末加上一个中文的空格符号chr(12288)
f = open('ProvinceCityList.txt','w')
print(tplt.format("序号","省市","简称","具体网址",chr(12288)))
f.write(tplt.format("序号","省市","简称","具体网址",chr(12288)))
for i in range(num):
c = clist[i]
print(tplt.format(c[0],c[1],c[2],c[3],chr(12288)))
f.write(tplt.format(c[0],c[1],c[2],c[3],chr(12288)))
f.close()
print('已输出至文件:ProvinceCityList.txt')
if __name__ == '__main__':
cinfo = []
baseURL='http://www.tcmap.com.cn' #一级网址
cityListURL = baseURL + '/list/jiancheng_list.html'
html = getHTMLText(cityListURL)
fillCityList(cinfo, html,baseURL)
printCityList(cinfo,34) # 输出前34个省市
点击查看代码
序号 省市 简称 具体网址
1 北京 京 http://www.tcmap.com.cn/beijing/
2 天津 津 http://www.tcmap.com.cn/tianjin/
3 河北 冀 http://www.tcmap.com.cn/hebei/
4 山西 晋 http://www.tcmap.com.cn/shanxisheng/
5 内蒙古 蒙 http://www.tcmap.com.cn/neimenggu/
6 辽宁 辽 http://www.tcmap.com.cn/liaoning/
7 吉林 吉 http://www.tcmap.com.cn/jilin/
8 黑龙江 黑 http://www.tcmap.com.cn/heilongjiang/
9 上海 沪 http://www.tcmap.com.cn/shanghai/
10 江苏 苏 http://www.tcmap.com.cn/jiangsu/
11 浙江省 浙 http://www.tcmap.com.cn/zhejiangsheng/
12 安徽 皖 http://www.tcmap.com.cn/anhui/
13 福建 闽 http://www.tcmap.com.cn/fujian/
14 江西 赣 http://www.tcmap.com.cn/jiangxi/
15 山东 鲁 http://www.tcmap.com.cn/shandong/
16 河南 豫 http://www.tcmap.com.cn/henan/
17 湖北 鄂 http://www.tcmap.com.cn/hubei/
18 湖南 湘 http://www.tcmap.com.cn/hunan/
19 广东 粤 http://www.tcmap.com.cn/guangdong/
20 广西 桂 http://www.tcmap.com.cn/guangxi/
21 海南 琼 http://www.tcmap.com.cn/hainan/
22 重庆 渝 http://www.tcmap.com.cn/chongqing/
23 四川 川 http://www.tcmap.com.cn/sichuan/
24 贵州 黔 http://www.tcmap.com.cn/guizhou/
25 云南 滇 http://www.tcmap.com.cn/yunnan/
26 西藏 藏 http://www.tcmap.com.cn/Tibet/
27 陕西 陕 http://www.tcmap.com.cn/shanxi/
28 甘肃省 甘 http://www.tcmap.com.cn/gansusheng/
29 青海 青 http://www.tcmap.com.cn/qinghai/
30 宁夏 宁 http://www.tcmap.com.cn/ningxia/
31 新疆 新 http://www.tcmap.com.cn/xinjiang/
32 台湾 台 http://www.tcmap.com.cn/taiwan/
33 香港特别行政区 港 http://www.tcmap.com.cn/HongKong/
34 澳门 澳 http://www.tcmap.com.cn/Macau/
已输出至文件:ProvinceCityList.txt