一、分析网页
网站的页面是 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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持免费资源网。
© 版权声明
THE END
暂无评论内容