爬一下去哪儿的景点信息 - Python

本文内容仅供学习交流使用,不具有任何商业用途,如有问题请即时联系我处理。--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}&region=&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保存后就不会出现显示乱码的问题。

武汉:

 

posted @ 2021-11-08 15:31  、一叶孤城  阅读(122)  评论(0编辑  收藏  举报