概述
模块知识
- BeautifulSoup的使用
HTML语言
三个重要的组成
- 标签
- 属性(标签的特性,区分标签)
- 元素(要提取的元素)
代码实现
import requests
from bs4 import BeautifulSoup # 用于从HTML或XML文件中提取数据的Python库
'''
1、获取分页网址列表
也就是每一页景点集合的网址
'''
url_list = [] # 列表:用于存放网址
url1 = 'https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-'
for i in range(5):
# 将5个网页的网址放入一个列表
url_list.append(url1 + str(i+1))
#print(url_list)
'''
2、数据采集 - 测试
'''
u1 = url_list[0]
# 访问网址
res = requests.get(u1) # 得到对象类型requests.models.Response
# 解析网页 res.text为获取文本(HTML字符串格式),lxml为解析器类型
soup = BeautifulSoup(res.text, 'lxml')
# print(soup)
# 寻找属性为"list_item clrfix"的标签'ul'内容里的'li'标签的内容
lis = soup.find('ul', class_="list_item clrfix").find_all('li')
# 用来存储获取到的景区数据
datalst = []
for li in lis:
dic = {} # 创建空字典,用于存储数据
# 得到属性为class_="cn_tit"的标签span的内容
dic['景点名称'] = li.find('span',class_="cn_tit").text
dic['评分'] = li.find('span',class_="total_star").span['style']
dic['排名'] = li.find('span',class_="ranking_sum").text
dic['攻略提到数量'] = li.find('div',class_="strategy_sum").text
dic['点评数量'] = li.find('div',class_="comment_sum").text
dic['多少比例驴友来过'] = li.find('div',class_="txtbox clrfix").find('span',class_="comment_sum").text
dic['经度'] = li['data-lng']
dic['纬度'] = li['data-lat']
datalst.append(dic) # 放入全局变量的列表中
#print(datalst)
'''
3、循环采集数据
'''
datalst = []
for ui in url_list:
ri = requests.get(ui) # 访问网页
soupi = BeautifulSoup(ri.text, 'lxml') # 解析网页
lis = soupi.find('ul', class_="list_item clrfix").find_all('li')
for li in lis:
dic = {} # 创建空字典,用于存储数据
dic['景点名称'] = li.find('span',class_="cn_tit").text
dic['评分'] = li.find('span',class_="total_star").span['style']
dic['排名'] = li.find('span',class_="ranking_sum").text
dic['攻略提到数量'] = li.find('div',class_="strategy_sum").text
dic['点评数量'] = li.find('div',class_="comment_sum").text
dic['多少比例驴友来过'] = li.find('div',class_="txtbox clrfix").find('span',class_="comment_sum").text
dic['经度'] = li['data-lng']
dic['纬度'] = li['data-lat']
datalst.append(dic)
# print('成功采集',len(datalst),'条数据')
# print(datalst)
'''
4、数据导出
'''
import pandas as pd
# 将数据转换为DataFrame
data_df = pd.DataFrame(datalst)
# 数据清洗
data_df['经度'] = data_df['经度'].astype('float')
data_df['纬度'] = data_df['纬度'].astype('float')
data_df['点评数量'] = data_df['点评数量'].astype('int')
data_df['攻略提到数量'] = data_df['攻略提到数量'].astype('int')
data_df['评分'] = data_df['评分'].str.split(':').str[-1].str.replace('%','').astype('int')
data_df['多少比例驴友来过'] = data_df['多少比例驴友来过'].str.split('%').str[0].astype('float')/100
data_df['排名'] = data_df[data_df['排名']!='']['排名'].str.split('第').str[-1].astype('int')
# 导出excel
data_df.to_excel('C:/Users/jin/Desktop/day2_result.xlsx')
#print(data_df)
效果
最后
以上就是仁爱爆米花为你收集整理的python爬虫应用 -- 采集城市景点数据的全部内容,希望文章能够帮你解决python爬虫应用 -- 采集城市景点数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复