Python爬虫实战之爬取携程评论
简介
本文将介绍如何使用Python爬虫抓取携程网站的酒店评论数据,并利用数据进行简单的分析。本文主要分为以下几个部分:
- 携程网站酒店评论数据的爬取
- 数据预处理
- 数据分析
- 结束语
携程网站酒店评论数据的爬取
爬虫获取数据的第一步是确定需要爬取的目标网站。在本文中,我们以携程网站上某家酒店的评论数据为例,来介绍Python爬虫的爬取过程。
首先,我们需要分析携程网站上评论数据的页面结构。以某家酒店的评论页面为例,可以发现该页面的URL由两部分组成:
- https://hotels.ctrip.com/hotel/dianping/6836777:酒店的基础页面URL
- _p2.html:该页评论数据的后缀,其中"_p2"表示页面的页码编号,从1开始递增
通过分析URL可以发现,我们可以通过修改"_p2"的值来爬取不同页数的评论数据。因此,我们会使用Python的requests库访问URL,并分析HTML页面结构来提取评论数据。
下面是代码示例:
import requests
from bs4 import BeautifulSoup
# 定义目标URL和请求头
url = 'https://hotels.ctrip.com/hotel/dianping/6836777_p2.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 发送请求并获取页面HTML
r = requests.get(url, headers=headers)
html = r.content
# 使用BeautifulSoup解析HTML页面结构,并为碰到的评论数据设置CSS选择器
soup = BeautifulSoup(html, 'html.parser')
comment_list = soup.select('div.comment_single > div.comment_main > div.comment_txt')
# 遍历并输出评论数据
for comment in comment_list:
content = comment.get_text(strip=True)
print(content)
上述代码首先发送请求访问目标URL,并使用BeautifulSoup解析HTML页面结构。然后,我们使用CSS选择器来确定需要提取的评论信息,遍历结果并输出评论文本数据。
数据预处理
爬虫抓取的数据往往需要一定的预处理才能使后续分析更加便捷。以下是一个简单的数据预处理例子,其中将收集到的评论信息进行了简单的文本清洗,包括去除空格,转换大小写等等:
import requests
import re
from bs4 import BeautifulSoup
# 定义目标URL和请求头
url = 'https://hotels.ctrip.com/hotel/dianping/6836777_p2.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 发送请求并获取页面HTML
r = requests.get(url, headers=headers)
html = r.content
# 使用BeautifulSoup解析HTML页面结构,并为碰到的评论数据设置CSS选择器
soup = BeautifulSoup(html, 'html.parser')
comment_list = soup.select('div.comment_single > div.comment_main > div.comment_txt')
# 创建数据列表
data = []
# 遍历并预处理评论数据
for comment in comment_list:
content = comment.get_text(strip=True) # 去除空格
content = content.lower() # 转换为小写字母
content = re.sub(r'[^\w\s]', '', content) # 去除非单词和非空白字符
data.append(content)
# 输出预处理后的评论
print(data)
在上述代码中,我们首先遍历已经爬取到的评论信息,对其进行空格清洗和字符全部转换为小写字母的操作,然后使用正则表达式去掉所有非单词和非空白字符,最后将处理后的结果存入data列表中方便后续分析。
数据分析
有了预处理后的数据,我们就可以进行一定程度的数据分析以了解数据的分布情况并为后续分析做准备。
以下是一个简单的数据分析例子,其中使用了Python的matplotlib库来为处理后的评论数据绘制直方图。这个直方图将评论文本数据的词频图可视化,帮助我们了解词频分布和常见词汇:
import requests
import re
from bs4 import BeautifulSoup
import numpy as np
import matplotlib.pyplot as plt
# 定义目标URL和请求头
url = 'https://hotels.ctrip.com/hotel/dianping/6836777_p2.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 发送请求并获取页面HTML
r = requests.get(url, headers=headers)
html = r.content
# 使用BeautifulSoup解析HTML页面结构,并为碰到的评论数据设置CSS选择器
soup = BeautifulSoup(html, 'html.parser')
comment_list = soup.select('div.comment_single > div.comment_main > div.comment_txt')
# 创建数据列表
data = []
# 遍历并预处理评论数据
for comment in comment_list:
content = comment.get_text(strip=True) # 去除空格
content = content.lower() # 转换为小写字母
content = re.sub(r'[^\w\s]', '', content) # 去除非单词和非空白字符
data.append(content)
# 存储词频数据并绘制直方图
word_counts = {}
for c in data:
for word in c.split():
if word not in word_counts:
word_counts[word] = 1
else:
word_counts[word] += 1
ordered_word_counts = sorted(word_counts.items(), key=lambda x: -x[1])
words = [x[0] for x in ordered_word_counts[:10]]
counts = [x[1] for x in ordered_word_counts[:10]]
pos = np.arange(len(words))
plt.bar(pos, counts, align='center', alpha=0.5)
plt.xticks(pos, words)
plt.ylabel('Word Count')
plt.show()
上述代码首先对预处理后的评论文本数据进行简单的词频统计,然后使用Python的matplotlib库绘制出评论文本数据的词频图。
结束语
到此为止,我们已经完成了基于Python爬虫的携程网站酒店评论数据爬取和分析的教程。希望本文对想要学习Python爬虫的同学有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫实战之爬取携程评论 - Python技术站