js抓取网页内容(大量Python学习资料网站的页面数据分析网页加载的应用 )

优采云 发布时间: 2022-01-16 10:10

  js抓取网页内容(大量Python学习资料网站的页面数据分析网页加载的应用

)

  文章目录

  一、分析网页

  爬美团成都地区酒店信息

  私信小编01可以获取大量Python学习资料

  页面

  网站 由 JavaScript 渲染。我们看到的内容只是在网页加载完毕并执行了 JavaScript 代码之后才渲染出来的,所以这些数据在原创的 HTML 代码中是不存在的。 , 而请求只获取原创 HTML 代码。

  爬取该类型的页面数据网站,解决方法如下:

  分析Ajax,通过Ajax请求可能会得到很多数据,所以可以分析一下它的接口。

  

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

  

  可以在预览中找到每页20条信息

  

  模拟JavaScript渲染过程,直接捕捉渲染结果。

  Selenium 和 pyppeteer 爬虫使用这种方法

  二、爬取酒店信息

  """

@Author :叶庭云

@Date :2020/9/16 15:01

@CSDN :https://blog.csdn.net/fyfugoyfa

"""

import requests

import json

import openpyxl

import logging

from concurrent.futures import ThreadPoolExecutor

import random

import time

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)

if __name__ == '__main__':

page = [i for i in range(56)]

with ThreadPoolExecutor(max_workers=4) as executor:

executor.map(hotel_data, page)

wb.save("hotel.xlsx")

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

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线