zoukankan      html  css  js  c++  java
  • 爬一下去哪儿的景点信息

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

    武汉:

     

  • 相关阅读:
    枚举类型总结
    正则表达式-Java
    java中Mongo
    cookie
    xsd解析
    水平分表的实现
    c#位运算小例子笔记
    c#设计模式之观察者模式(Observer Pattern)
    c#设计模式之代理模式(Proxy Pattern)
    .Net 数据缓存浅析
  • 原文地址:https://www.cnblogs.com/mafu/p/15524499.html
Copyright © 2011-2022 走看看