用 Python 实现一个面向主题的网络爬虫程序, 并完成以下内容:
(注: 每人一题, 主题内容自选, 所有设计内容与源代码需提交到博客园平台)
一, 主题式网络爬虫设计方案(15 分)
1. 主题式网络爬虫名称
名称: 爬取携程网站泉州地区酒店信息
2. 主题式网络爬虫爬取的内容与数据特征分析
本次爬虫主要爬取携程网站泉州地区酒店名称与地址和酒店评分
3. 主题式网络爬虫设计方案概述(包括实现思路与技术难点)
实现思路: 本次设计方案主要使用 request 库爬取网页信息和 beautifulSoup 库来提取泉州地区酒店信息
技术难点: 主要包括对携程网站泉州地区酒店部分的页面进行分析采集
二, 主题页面的结构特征分析(15 分)
1. 主题页面的结构特征
2.htmls 页面解析
通过 F12, 对页面进行检查, 查看我们所需要爬取内容的相关代码
3. 节点 (标签) 查找方法与遍历方法
(必要时画出节点树结构)
查找方法: find
遍历方法: for 循环
三, 网络爬虫程序设计(60 分)
爬虫程序主体要包括以下各部分, 要附源代码及较详细注释, 并在每部分程序后面提供输出结果的截图.
1. 数据爬取与采集
2. 对数据进行清洗和处理
3. 文本分析(可选):jieba 分词, wordcloud 可视化
4. 数据分析与可视化
(例如: 数据柱形图, 直方图, 散点图, 盒图, 分布图, 数据回归分析等)
5. 数据持久化
6. 附完整程序代码
- # 导入相关模块
- import requests
- from bs4 import BeautifulSoup
- import pandas as pd
- def getHtml(url):
- # 判断爬取 是否出错
- try:
- # 使用 get 方式爬取页面, 添加头部伪装浏览器
- r = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
- r.raise_for_status()
- # 设置编码格式
- r.encoding = r.apparent_encoding
- # 返回源码
- return r.text
- except:
- return "页面爬取 Error"
- def HotelList(text,hotellist):
- soup = BeautifulSoup(text, "html.parser")
- # 爬取酒店列表
- hotel_list = soup.select("div#hotel_list>div")
- # 循环
- for hotel in hotel_list:
- # 将可能出现错误的地方进行跳过
- try:
- # 酒店名称
- hotel_name = hotel.select("h2")[0].text
- # 酒店链接
- href = hotel.select("h2>a")[0].attrs["href"]
- # 服务贫家
- recommend = hotel.select("span.recommend")[0].text
- p = hotel.select("p.hotel_item_htladdress")
- # 酒店地址
- dizhi = p[0].text
- # 最新预定时间
- newtime = hotel.select("p.hotel_item_last_book")[0].text
- # 评分
- hotel_score = hotel.find_all("span", "hotel_value")[0].text
- # 点评人数
- people_number = hotel.select("span.hotel_judgement>span")[0].text
- # 酒店评分
- level = hotel.find_all("span", "hotel_level")[0].text
- # 质量保证
- ico_quality_gold = hotel.select("span.ico_quality_gold")[0].text
- # 所属地区
- diqu = p[0].find_all(
- "a", attrs={"tracekey": "nhtllistroomclick"})[0].text
- # price = hotel.find_all("span", "J_price_lowList")[0].text
- hotellist.append([hotel_name, href, recommend, dizhi, newtime,
- hotel_score, people_number, level, ico_quality_gold, diqu])
- print([hotel_name, href, recommend, dizhi, newtime,
- hotel_score, people_number, level, ico_quality_gold, diqu])
- except:
- "一个数据爬取出错"
- hotellist.append([hotel_name, href, recommend, dizhi, newtime,
- hotel_score, people_number, level, ico_quality_gold, diqu])
- def savedata(hotellist):
- wri = pd.ExcelWriter("HotelList.xlsx")
- col = ["hotel_name", "href", "recommend", "dizhi", "newtime",
- "hotel_score", "people_number", "level", "ico_quality_gold", "diqu"]
- pf = pd.DataFrame(hotellist,columns=col)
- # 写入 Excel
- pf.to_excel(wri)
- wri.save()
- def main():
- # 存放数据的数组
- hotellist = []
- text = getHtml(
- "https://hotels.ctrip.com/hotel/quanzhou406#ctm_ref=hod_hp_sb_lst")
- HotelList(text, hotellist)
- #打印结果信息
- print(hotellist)
- # 数据保存
- savedata(hotellist)
四, 结论(10 分)
1. 经过对主题数据的分析与可视化, 可以得到哪些结论?
通过对泉州地区酒店的爬取, 可以知道每个酒店的具体名称和地址还有酒店评分, 由此可知泉州华侨大厦和希岸酒店, 泉州钱隆酒店的评分最高; 泉州泉兴精品酒店评分最低.
泉州酒店点评人数最多, 泉州钱隆酒店点评人数最少.
2. 对本次程序设计任务完成的情况做一个简单的小结.
我觉得这次爬虫的内容还挺有意思的, 也让我学到了很多书本以外的知识, 一步一步自己探索出来, 遇到不懂的问题及时问同学答疑解惑. 这一次任务按照老师的要求一步一步来实现, 虽然有一些没有完全实现出来, 还存在在很多问题, 但是发现问题多了也就能及时查缺补漏, 让我们对 Python 这门语言有了更深的理解, 也让我增加了更多的兴趣对于这个课程, 能够让自己能更好地进步.
来源: https://www.cnblogs.com/wangjiaping/p/12076949.html