Python爬虫练习:爬取美团网成都地区的酒店信息

python

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于快学Python ,作者叶庭云

 

一、分析网页

网站的页面是 JavaScript 渲染而成的,我们所看到的内容都是网页加载后又执行了JavaScript代码之后才呈现出来的,因此这些数据并不存在于原始 HTML 代码中,而 requests 仅仅抓取的是原始 HTML 代码。抓取这种类型网站的页面数据,解决方案如下:

分析 Ajax,很多数据可能是经过 Ajax 请求时候获取的,所以可以分析其接口。

 

在XHR里可以找到,Request URL有几个关键参数,uuid和cityId是城市标识,offset偏移量可以控制翻页,分析网页发现,第x页的offset为:(x-1)*20,limit表示每页有20条信息,startDay和endDay为当前的日期。

 

在Preview里可以找到每页的20条信息

 

模拟JavaScript渲染过程,直接抓取渲染后的结果。

selenium和pyppeteer爬虫就是用的这种方法

二、爬取酒店信息

logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s: %(message)s")

url = "https://ihotel.meituan.com/hbsearch/HotelSearch"

headers = {

    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36",

    "Referer": "https://hotel.meituan.com/chengdu"

}

wb = openpyxl.Workbook()

sheet = wb.active

sheet.append(["酒店名称", "酒店地址", "酒店类型", "最低价", "评价", "评论数", "经度", "纬度"])

def hotel_data(x):

    data = {

        "utm_medium": "pc",

        "version_name": 999.9,

        "cateId": 20,

        "attr_28": 129,

        "uuid": "5D4E443EC83DDD49B73F317921EAE16C7B492A634A67FA261773890F730A5932@1600263777783",

        "cityId": 59,

        "offset": x * 20,

        "limit": 20,

        "startDay": 20200916,

        "endDay": 20200916,

        "q": "", "sort": "defaults",

        "X-FOR-WITH": "47zbBAV+k1e7QrnKt4lEVXrmtOE9w2OpFfGsKf539CDdXIw4r2V/qICcWVeNACGHWNbD6iL4huPyRVdkNJJwR6dqcoQMyzjUE3cQGWr6YZOwANQOlCSrZ7m1+aahwcnh/dTfaJLMZfxWaJQEISBuKbiMgDC8Vr4eaeWiYASkLl0ByB96MOUz7gfjUTbhlV0ZXvZ/ucwNcK3zxTQjmoBINsAY4HwpKQLpOV2IqV1CtPg=",

    }

    res = requests.get(url, headers=headers, params=data)

    time.sleep(random.randint(1, 3))

    results = json.loads(res.text)["data"]["searchresult"]

    for con in results:

        name = con["name"]              # 酒店名称

        addr = con["addr"]              # 酒店地址

        star = con["hotelStar"]         # 酒店类型

        price = con["lowestPrice"]      # 最低价

        scoreIntro = con["scoreIntro"]  # 评价

        comments = con["commentsCountDesc"]  # 评论数

        lng, lat = con["lng"], con["lat"]    # 经纬度

        data = [name, addr, star, price, scoreIntro, comments, lng, lat]

        sheet.append(data)

        logging.info(data)

程序运行成功,酒店信息保存到了Excel。

以上是 Python爬虫练习:爬取美团网成都地区的酒店信息 的全部内容, 来源链接: utcz.com/z/530981.html

回到顶部