爬取json接口的数据,返回的数据不完整,但用浏览器中(如图)可以看到
import urllib.request
url='http://www.airbnb.cn/api/v2/explore_tabs?_format=for_explore_search_web&_intents=p1&auto_ib=true&checkin=2019-04-16&checkout=2019-04-17¤cy=CNY&experiences_per_grid=20&fetch_filters=true&guidebooks_per_grid=20&has_zero_guest_treatment=true&is_guided_search=true&is_new_cards_experiment=true&is_standard_search=true&items_offset=18&items_per_grid=18&key=d306zoyjsyarp7ifhu67rjxn52tv0t20&locale=zh&luxury_pre_launch=true&map_toggle=false&metadata_only=false&place_id=&poi_group=0&poi_id=&poi_tab=district&query=%E6%88%90%E9%83%BD&query_understanding_enabled=true&refinement_paths%5B%5D=%2Fhomes&satori_version=1.1.3&screen_size=large§ion_offset=7&selected_tab_id=home_tab&show_groupings=true&supports_for_you_v3=true&timezone_offset=480&version=1.4.8'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
}
req=urllib.request.Request(url=url,headers=headers,method='GET')
res=urllib.request.urlopen(req)
print(res.read().decode('utf-8'))
具体没用过这个玩意儿,很多种可能
比如解析方式(http包解析)不同造成;
比如为了快速读取解析,一次性分缓冲区,而缓冲区大小不足;
and so on。
估计你要做的是:1此模块是支持的情况下设置参数;
2不支持,换sdk;
3或者直接从tcp写也很简单;
你不要打印,把请求的数据保存到本地txt看下
你直接浏览器中访问 airbnb 的地址另存为wxplore_tabs.json文件,该文件的大小已经达到了160多kb,比较大了。
针对你上面反馈的问题,一般会出现如下几种情况:
1、request中设置的buffer小了,然后无法全部获取到这个文件;此时可以在urlopen()调整参数进行修改;
2、request的默认超时时间短了,访问airbnb的地址由于文件大,超时了,然后只能解析到接收到的数据,此时可以在urlopen()中添加超时配置。
我的浏览器打开这个url也看不到“锦江区”。我的浏览器和python请求到的数据是一致的。
确认一下浏览器打开的url和Python请求的是否一致。
如果一致,看下浏览器里面是不是登录了。清除浏览器缓存再打开看看。
如果清除缓存之后和请求下来的内容一样,你在请求里面带上cookie就可以了。
还有返回的数据不完整,是json数据就是断的,也就是json解析不了;还是json是完整的,只是解析出来数据和浏览器打开的不一致,麻烦描述清楚一点。