Python爬取携程旅游行程信息+GIS可视化

一、需求:

        爬取携程旅行网的“北京推荐行程”首页的各个行程文章,将各个行程所包含的景点信息提取出来,并导入ArcGIS进行GIS可视化。

二、爬取思路:

        爬取北京推荐行程主页的各个文章的URL,然后通过该URL爬取出行程文章的数据,最后进行信息提取,得到行程景点的相关信息。

三、编写代码:

import urllib.request
import re
import pandas as pd

#模拟浏览器
headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
#行程主页URL
baseUrl="http://you.ctrip.com/journeys/beijing1.html"
pagedata1=urllib.request.urlopen(baseUrl).read().decode("utf-8","ignore")
#行程文章的名称与URL的提取规则
articleUrlPat='<!--整块链接-->\r.*?<a href="(.*?)" '
articleNamePat='<dt class="ellipsis">(.*?)<'
#提取文章的名称与URL
journeyUrl=re.compile(articleUrlPat,re.S).findall(pagedata1)
journeyName=re.compile(articleNamePat,re.S).findall(pagedata1)
x=[]
#分层爬取
for i in range(0,len(journeyUrl)):
    thisUrl="http://you.ctrip.com/"+journeyUrl[i]
    thisName=journeyName[i]
    pagedata2=urllib.request.urlopen(thisUrl).read().decode("utf-8","ignore")
    namePat='"name":"(.*?)"'
    latPat='"lng":"(.*?)"'
    lonPat='"lat":"(.*?)"'
    sightNames=re.compile(namePat,re.S).findall(pagedata2)
    sightLats=re.compile(latPat,re.S).findall(pagedata2)
    sightLons=re.compile(lonPat,re.S).findall(pagedata2)
    for j in range(0,len(sightNames)):
        sightname=sightNames[j]
        sightlat=sightLats[j]
        sightlon=sightLons[j]
        x.append([i,thisName,j,sightname,float(sightlat),float(sightlon)])
#将数据结构化存储至规定目录的CSV文件中
c = pd.DataFrame(x)
c.to_csv('E:/journey.csv',encoding='utf-8-sig')

四、GIS可视化:

1、将爬取的CSV处理后,导入ArcMap中:

2、点集转线,线字段设置为field2(代码中的“i”变量),排序字段设置为field4(代码中的“j”变量):

3、根据不同行程进行唯一值渲染:

猜你喜欢

转载自blog.csdn.net/Smart3S/article/details/83420932
今日推荐