去哪儿热门游记数据分析
游记数据爬虫
数据地址:去哪儿网 ☛攻略☛攻略库☛热门游记
选取了人均费用在3000以内的热门游记进行爬虫
由下图可以看到一些热门游记,我们到一些有用的数据:标题、途径、路程还有作者
打开一篇游记,我们可以爬取到的数据有:出发日期、旅游天数、人均费用、结伴人物、玩法、游记创作的时间以及游记的浏览量。
先爬取每页的网址,爬取200页游记,每页有10篇游记,一共大概爬取2000篇游记(会有偏差)由于无法直接从每页的页面中直接爬取每条游记的url,但是通过观察网页源代码,我们可以发现每条游记(li class)下的h2下a href的前部分是相同的(都是/youji/),不同的是后面的一串数字,而这串数字就是h2的data-bookid,所以是可以直接爬取出来的。爬出这个data-bookid就可以得出每条游记的url了。
这部分的爬虫代码如下:
import requests
from bs4 import BeautifulSoup
import re
import time
import csv
import random
# 爬取每个网址的分页
fb = open(r'url_id.txt','w') # 以只写模式打开文件(id)
url = 'http://travel.qunar.com/travelbook/list.htm?page={}&order=hot_heat&avgPrice=1_2' # 价格为3000内的游记的网址
headers={
'User - Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
count = 1
for i in range(1, 201):
url_ = url.format(i) # 每页的网址
try:
response = requests.get(url=url_,headers = headers)
response.encoding = 'utf-8'
html = response.text
soup = BeautifulSoup(html,'html.parser')
#print(soup)
all_url = soup.find_all('li',attrs={
'class': 'list_item'}) # 当前页的所有游记的网址
#print(all_url[0])
print('正在爬取第%s页' % count)
for each in all_url:
each_url = each.find('h2')['data-bookid'] # 每一条游记的id
#print(each_url)
fb.write(each_url) # 写每一条游记的id
fb.write('\n')
time.sleep(random.randint(3,5))
count+=1
except Exception as e:
print(e)
继而爬取每条游记的网址(借助上面爬取到的ID),爬取每条游记的信息,在这里,我爬取了’地点’, ‘短评’, ‘出发时间’, ‘天数’,‘人均费用’,‘人物’,‘玩法’,‘浏览量’。
import requests
from bs4 import BeautifulSoup
import re
import time