本文内容仅供学习交流使用,不具有任何商业用途,如有问题请即时联系我处理。--Python逐梦者
""" 爬一下去哪儿的旅游景点 """ import random import requests import parsel import csv import time from urllib.parse import quote keyword = input('请输入要搜索的地区:') # 要搜索的地区 # 先打开一个文件 f = open(f'{keyword}旅游景点.csv', mode='a', encoding='utf-8-sig', newline='') # csv文档的头 csvWriter = csv.DictWriter(f, fieldnames=[ '景区名字', '景区等级', '地区', '地址', '热度', '简介', '价格', '月销', ]) # 写入头 csvWriter.writeheader() # 定义参数 headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', } data = { "keyword": keyword, # 参数用于关键词更改 "region": "", "from": "mpl_search_suggest", } quotedKeyword = quote(keyword) # 将关键词编码 # print(quotedKeyword) # # 多页爬取 for i in range(1, 10): time.sleep(random.randint(2, 5)) # 每次爬取完进行随机休眠 print(f'========正在爬取{keyword}的第{i}页,请耐心等待。======== ') url = f'https://piao.qunar.com/ticket/list.htm?keyword={quotedKeyword}®ion=&from=mpl_search_suggest' response = requests.get(url=url, headers=headers, data=data) # 带参数进行请求 selector = parsel.Selector(response.text) # 选择器 # 从选择器中提取景点列表 lis = selector.css('#search-list .sight_item') # 找到页面中所有的景点列表 # 开始循环列表 for li in lis: time.sleep(random.randint(2, 5)) # 随机休眠2-5秒 # name = li.css('a::text').get() name = li.css('.name::text').get() # 景区名称 level = li.css('.sight_item_info .level::text').get() # 景区等级 if not level: level = '暂未定级!' area = li.css('.sight_item_info .area a::text').get() # 地区 address = li.css('.address span::attr(title)').get() # 地址 hotstring = li.css('.sight_item_hot .product_star_level em::attr(title)').get() # 景区热度 intro = li.css('.intro::attr(title)').get() # 景区简介 price = li.css('.sight_item_price em::text').get() # 景区门票 monthsold = li.css('.sight_item_sold-num span::text').get() # 月销量 print(name, level, area, address, hotstring, intro, monthsold, sep='|') dit = { '景区名字':name, '景区等级':level, '地区':area, '地址':address, '热度':hotstring, '简介':intro, '价格':price, '月销':monthsold, } csvWriter.writerow(dit) # 将字典按行写入到csv文档 print(f'{keyword}保存完毕!')
爬了两遍,一遍是张家界的,一遍是武汉的。截图如下:
张家界:
编码问题,用utf-8-sig保存后就不会出现显示乱码的问题。
武汉: