正文
i:
page = getPage(url.format(i))
selector = etree.HTML(page)
print
'正在爬取第'
+ str(i) +
'页景点信息'
i+=
1
informations = selector.xpath(
'//div[@class="result_list"]/div'
)
for
inf
in
informations:
#获取必要信息
sight_name = inf.xpath(
'./div/div/h3/a/text()'
)[
0
]
sight_level = inf.xpath(
'.//span[@class="level"]/text()'
)
if
len(sight_level):
sight_level = sight_level[
0
].replace(
'景区'
,
''
)
else
:
sight_level =
0
sight_area = inf.xpath(
'.//span[@class="area"]/a/text()'
)[
0
]
sight_hot = inf.xpath(
'.//span[@class="product_star_level"]//span/text()'
)[
0
].replace(
'热度 '
,
''
)
sight_add = inf.xpath(
'.//p[@class="address color999"]/span/text()'
)[
0
]
sight_add = re.sub(
'地址:|(.*?)|\(.*?\)|,.*?$|\/.*?$'
,
''
,str(sight_add))
sight_slogen = inf.xpath(
'.//div[@class="intro color999"]/text()'
)[
0
]
sight_price = inf.xpath(
'.//span[@class="sight_item_price"]/em/text()'
)
if
len(sight_price):
sight_price = sight_price[
0
]
else
:
i =
0
break
sight_soldnum = inf.xpath(
'.//span[@class="hot_num"]/text()'
)[
0
]
sight_url = inf.xpath(
'.//h3/a[@class="name"]/@href'
)[
0
]
sightlist.append([sight_name,sight_level,sight_area,float(sight_price),int(sight_soldnum),float(sight_hot),sight_add.replace(
'地址:'
,
''
),sight_slogen,sight_url])
time.sleep(
3
)
return
sightlist,place
-
这里把每个景点的所有信息都爬下来了(其实是为了练习使用 xpath……)。
-
使用了 while 循环,for 循环的 break 的方式是发现无销量时给 i 值赋零,这样 while 循环也会同时结束。
-
地址的匹配使用 re.sub() 函数去除了 n 多复杂信息,这点后面解释。
为了防止代码运行错误,维护代码运行的和平,将输出的信息列表存入到 excel 文件中了,方便日后查阅,很简单的代码,需要了解 pandas 的用法。
def listToExcel(list,name):
df = pd.DataFrame(list,columns=['景点名称','级别','所在区域','起步价','销售量','热度','地址','标语','详情网址'])
df.to_excel(name + '景点信息.xlsx')
非常悲伤的,(ಥ﹏ಥ)我没找到去哪儿景点的经纬度,以为这次学(zhuang)习(bi)计划要就此流产了。(如果有人知道景点经纬度在哪里请告诉我)
但是,enhahhahahaha,我怎么会放弃呢,我又找到了百度经纬度 API。
网址:
http://api.map.baidu.com/geocoder/v2/?address=地址&output=json&ak=百度密钥
,
修改网址里的“地址”和“百度密钥”,在浏览器打开,就可以看到经纬度的 json 信息
。
#上海市东方明珠的经纬度信息