AMZ123跨境卖家导航
拖动LOGO到书签栏,立即收藏AMZ123
首页跨境头条文章详情

如何爬动态加载的页面?ajax爬虫你有必要掌握

任佳伟
任佳伟
13851
2018-09-21 19:13
2018-09-21 19:13
13851


通过前面几期Python爬虫的文章,不少童鞋已经可以随心所欲的爬取自己想要的数据,就算是一些页面很难分析,也可以用之前介绍的终极技能之「Selenium」+「Webdriver」解决相关问题,但无奈这种办法效率太慢,咋整?


今天就为大家介绍Ajax异步加载的数据的爬取。


↓↓↓


何为Ajax异步加载的数据呢?


Ajax,全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。对于传统的网页,如果想更新其内容,那么必须要刷新整个页面,但有了Ajax,便可以在页面不被全部刷新的情况下更新其内容。在这个过程中,页面实际上是在后台与服务器进行了数据交互,获取到数据之后,再利用JavaScript改变网页,这样网页内容就会更新了。




通俗来讲:就像一栋房子,先把框框架架搭起来(前端页面框架),再给他装修、置办家具(填充数据),这里的装修、置办家具即是ajax请求的数据。。


我们可以通过一些网站的事例来直观的了解一下什么到底是什么是ajax。


例如访问“蘑菇街”电商平台中的食品类目:http://list.mogujie.com/book/food/52026,通过Chrome浏览器可以看到我们与“蘑菇街”交互的所有数据。


示范:

1

打开Chrome,访问

http://list.mogujie.com/book/food/52026

2

在Chrome中按F12或者在页面空白处点击鼠标右键→检查。

3

点击Clear 和 XHR 按钮。


4

刷新一下页面。  

5

点击一下左边的search?callback=JQuery….,再点击右边栏的Response其下方会出现一些看不懂,但又好像有点儿规则的数据。管他的,先Ctrl+A全选拷贝出来看看。(如果你把商品列表页继续下滑,会出现更多的这种数据哦。)

6

使用Chrome插件「JSON-hanle」或者访问:https://www.json.cn/将刚才拷贝的数据粘贴进去,点击OK。


7

 再与网页上的数据对比一下,见图:



怎么样?是不是一目了然,相关数据都在里面了。这里的orgPrice为原价、sale为销量、cfav为点赞、price为现价。这些数据都已经在这一串乱七八糟的字符里了,我们需要的就解析这串字符。


其实呢,这种数据格式叫做「Json」。json 是轻量级的文本数据交换格式,其格式与计算机语言中的字典(dict)类似,都是名称/值对(key/value)的格式。能拿到json数据就已经成功90%了,剩下的10%就是解析json拿出自己想要的数据、保存数据。但也不是所有的Ajax请求拿到的都是Json数据,例如亚马逊他就是这么66的。



下面将以我们日常能用到的,

爬取reviews来演练一遍Ajax请求:



1

访问某商品的所有reviews页面:https://www.amazon.com/product-reviews/  +  ASIN

2

reviews能按照我们预想的方式排列,在操作下图中的筛选条件后会生成新的链接。

如将SORT BY切换为Most recent,浏览器地址栏的链接会变为:https://www.amazon.com/product-reviews/B072DXSF6S/ref=cm_cr_arp_d_viewopt_srt?pageNumber=1&sortBy=recent


若直接使用requests.get该链接,返回的数据并不会按照预想的顺序排列。这种时候就需要抓包、Ajax请求登场了。


3

Chrome中按F12或者在页面空白处点击鼠标右键→检查。

4

首先点击Clear按钮,清除已捕获到的数据。再点击Next→按钮,看一下加载一页新的reviews会捕获到哪些数据。如下图,捕获到了一个名为“cm_cr_arp_d_paging_btm_3”的文件。最后点击Response,看一下这句文件到底传输了些什么。


5

如下图所示,在Response里的数据与网页前端页面的部分源码一致。可以认定,亚马逊是先将评论页面的框架搭好,然后通过Ajax的方式传输显示评论详情的前端代码。


6

再分析一下本次数据传输的headers、data等数据。这一步非常重要,在数据交互中各类请求头、请求参数都会影响本次请求的返回值。


在上图中已将一些关键的参数做了解释,方便大家理解。


7

下面就是敲代码时间了,按照之前的逻辑我们可以直接使用Ajax请求数据,然后根据返回的数据获取到reviews的网页源码,再加以解析。


首先准备好headers、cookies等数据。前期后童鞋表示headers什么的太难搞了,且不知道这里面花里胡哨的一堆是啥意思,今天告诉大家一个简便方法。首先在Chrome控制台抓到的数据上点击鼠标左键→Copy→Copy as cURL。如图:


再访问https://curl.trillworks.com/,在“curl command”中将刚才拷贝的cURL粘贴进去,右边将自动生成Python代码。如图:


嘿嘿嘿,爽不爽。现在只需要把右边的“Python requests”拷贝出来,粘贴到Pycharm里就可以跑起来啦,是不是美滋滋?。


8、打开Pycharm,新建项目,将代码拷贝进去。可以看到我们需要的headers, cookies, data全都已经备好了。稍微加工一下,跑一下看看。

response = requests.post('https://www.amazon.com/hz/reviews-render/ajax/reviews/get/', headers=headers, data=data)


印的为:                                            

这与刚才在Chrome看到的一样,证明我们成功获取到了数据。


9、将数据整理一下,并删除不需要的垃圾数据。

html_list = list(response.text.replace('&&&', '').split('
'))
reviews_html_list = html_list[
6:26]
print(len(reviews_html_list))
for i in reviews_html_list:
   
if len(i)==0:
        reviews_html_list.remove(i)


10、遍历整个列表取出每个评论的ID。

for reviews_html in reviews_html_list:
    frist_review_soup = BeautifulSoup(
eval(reviews_html)[2], 'lxml')
    review_id = frist_review_soup.find(
'div', 'a-section review')['id']


11、写一个解析review详情页的方法,方便调用。

def request_reviews_url(review_id):
    headers = {

       
'origin': 'https://www.amazon.com',
       
'accept-encoding': 'gzip, deflate, br',
       
'accept-language': 'zh-HK,zh-CN;q=0.9,zh;q=0.8',
       
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
       
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
       
'accept': 'text/html,*/*',
       
'referer': 'https://www.amazon.com/product-reviews/B00CJHZRW8/ref=cm_cr_arp_d_viewopt_srt?ie=UTF8&reviewerType=all_reviews&sortBy=helpful&pageNumber=1',
       
'authority': 'www.amazon.com',
       
'x-requested-with': 'XMLHttpRequest',
       
'dnt': '1',
   
}
    review_url =
'https://www.amazon.com/gp/customer-reviews/' + review_id
    review_html = requests.get(review_url
, headers=headers)
    review_soup = BeautifulSoup(review_html.text
, 'lxml')
    review_title = review_soup.find(
'a', 'review-title').text
   
print(review_title)
    review_author = review_soup.find(
'span', 'review-byline').text.replace('By', '')
   
print(review_author)
    review_date = review_soup.find(
'span', 'review-date').text.replace('on ', '')
   
print(review_date)
    review_text = review_soup.find(
'span', 'review-text').text
   
print(review_text)


这样就能完成让评论按要求排列,并爬取的需求了。附完整代码:

import requests
from bs4 import BeautifulSoup


def request_reviews_url(review_id):
    headers = {

       
'origin': 'https://www.amazon.com',
       
'accept-encoding': 'gzip, deflate, br',
       
'accept-language': 'zh-HK,zh-CN;q=0.9,zh;q=0.8',
       
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
       
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
       
'accept': 'text/html,*/*',
       
'referer': 'https://www.amazon.com/product-reviews/B00CJHZRW8/ref=cm_cr_arp_d_viewopt_srt?ie=UTF8&reviewerType=all_reviews&sortBy=helpful&pageNumber=1',
       
'authority': 'www.amazon.com',
       
'x-requested-with': 'XMLHttpRequest',
       
'dnt': '1',
   
}
    review_url =
'https://www.amazon.com/gp/customer-reviews/' + review_id
    review_html = requests.get(review_url
, headers=headers)
    review_soup = BeautifulSoup(review_html.text
, 'lxml')
    review_title = review_soup.find(
'a', 'review-title').text
   
print(review_title)
    review_author = review_soup.find(
'span', 'review-byline').text.replace('By', '')
   
print(review_author)
    review_date = review_soup.find(
'span', 'review-date').text.replace('on ', '')
   
print(review_date)
    review_text = review_soup.find(
'span', 'review-text').text
   
print(review_text)


if __name__ == '__main__':
    page =
1
   
headers = {
       
'origin': 'https://www.amazon.com',
       
'accept-encoding': 'gzip, deflate, br',
       
'accept-language': 'zh-HK,zh-CN;q=0.9,zh;q=0.8',
       
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
       
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
       
'accept': 'text/html,*/*',
       
'referer': 'https://www.amazon.com/product-reviews/B00CJHZRW8/ref=cm_cr_arp_d_viewopt_srt?ie=UTF8&reviewerType=all_reviews&sortBy=helpful&pageNumber=1',
       
'authority': 'www.amazon.com',
       
'x-requested-with': 'XMLHttpRequest',
       
'dnt': '1',
   
}
   
while 1:
        data = {
           
'sortBy': 'recent',
           
'reviewerType': 'all_reviews',
           
'formatType': '',
           
'mediaType': '',
           
'filterByStar': '',
           
'pageNumber': str(page),
           
'filterByKeyword': '',
           
'shouldAppend': 'undefined',
           
'deviceType': 'desktop',
           
# 'reftag': 'cm_cr_arp_d_viewopt_srt',
           
'pageSize': '10',
           
'asin': 'B072SS1NTM',
           
# 'scope': 'reviewsAjax1'
       
}
        response = requests.post(
'https://www.amazon.com/hz/reviews-render/ajax/reviews/get/', headers=headers, data=data)
        html_list =
list(response.text.replace('&&&', '').split(' '))
        reviews_html_list = html_list[
6:26]
       
for i in reviews_html_list:
           
if len(i) == 0:
                reviews_html_list.remove(i)
       
for reviews_html in reviews_html_list:
            frist_review_soup = BeautifulSoup(
eval(reviews_html)[2], 'lxml')
            review_id = frist_review_soup.find(
'div', 'a-section review')['id']
            request_reviews_url(review_id)
        page +=
1


爬虫中数据的分类主要有:结构化数据(json,xml等)和非结构化数据(HTML)。之前的文章中使用的案例都是从目标网站拿到非结构化数据然后使用正则表达式/xpath等解析,而今天讲是相对而言的结构化数据,可以使用json或xpath转换为Python对应的数据类型。寻找结构化数据可能在前期不好着手、找不到Post的正确URL,但一旦成功后将事半功倍。


照Web发展的趋势来看,以Ajax加载数据的方式将会越来越普遍。这种方式在Web开发上可以做到前后端分离,从而降低服务器直接渲染页面带来的压力。如果大家兴趣的话也可以自己动手尝试爬取一些其他网站的数据哟。


教了大家好几期的爬虫,大家有学会了的吗?觉得有用的小伙伴可以分享下朋友圈!或有什么问题,欢迎留言讨论哦!


往期精彩回顾
任佳伟:使用「Web Scraper」抓取商品信息
【Python爬虫】:使用「Selenium」+「Chromedriver」爬僵尸链接
【Python爬虫】:使用「Requests」+「bs4」写亚马逊爬虫


好文!必须点赞
免责声明
本文链接:
本文经作者许可发布在AMZ123跨境头条,如有疑问,请联系客服。
最新热门报告作者标签
Ozon计划26年新增15个物流中心,投资超300亿卢布
俄罗斯电商平台Ozon表示,2026年计划在俄罗斯新增15个物流综合设施,其中包括大型全流程履约中心以及用于存储和处理大件商品的物流设施。
26年巴西情人节消费达220亿雷亚尔,服饰美妆成热门品类
2026年巴西情人节(Dia dos Namorados)消费超过220亿雷亚尔,服装、化妆品、香水和鞋类成为最受关注的消费品类。
每15秒售出一件,TikTok Shop英国宠物品类快速增长
TikTok Shop公布数据显示,2025年平台宠物护理品类销售额同比增长超过60%,宠物用品正在成为平台增长较快的消费类别之一。在英国市场,TikTok Shop平均每15秒售出一件宠物产品,宠物食品相关内容也持续增加,其中猫粮相关帖子数量超过82.5万条,狗粮相关帖子数量超过57.2万条。
26年1-4月美国玩具市场销售额增长13%,女性成为主力
2026年1月至4月期间,美国玩具行业超过一半的增长来自女性消费者。同时,18岁及以上成年消费者贡献了整个玩具行业35%的增长,成人消费正在成为推动市场扩张的重要因素。
AMZ123会员专享丨7月第2周资讯汇总
亚马逊亚马逊宣布与MyFlexBox达成战略合作,其德国所有智能快递柜将接入亚马逊配送体系,并成为欧洲首个向亚马逊开放的大规模中立柜机网络。用户在结账时可选24/7自提点,提升取件灵活性。合作旨在共建共享末端基础设施,覆盖零售点、加油站等场景,减少重复配送、提高效率。7月6日曝光的官方文件显示,亚马逊在华盛顿州新一轮裁撤57个岗位,涉及多条业务线,其中包含总监、高级经理等中高层管理岗。7月7日,亚马逊宣布,亚马逊全球智能枢纽仓正式落地华东地区,上海、宁波双仓正式启用。这是继GWD深圳首仓全面运营后,亚马逊在完善跨境物流网络上的又一关键布局。
TikTok美区推行三级架构保证金,风险保证金最高$10000
重磅!TikTok美区新增保证金,卖家速查后台
紧急调整!美国CPSC法规给卖家暂时“松绑”了
在跨境电商迈入升级赛道的当下,合规化浪潮正以迅雷不及掩耳之势席卷整个行业。一系列政策法规如同多米诺骨牌般接连落地,逐渐渗透到跨境电商产品质检、税务申报、物流清关等流程。其中在近期讨论热度最高的,莫过于美国最新生效的CPSC法规。进入7月以来,CPSC电子申报(eFiling)新规在业内被高频提及。据业内消息,按原定计划,自7月8日起,美国消费品安全委员会(CPSC)将联合美国海关与边境保护局(CBP)全面施行电子申报(eFiling)新规,所有受CPSC监管的进口消费品需在清关前完成GCC/CPC合格证书电子申报,未按要求申报可能导致清关延误或货件被拒、退运。
TikTok Shop美区保证金大改!金额不再统一,速查后台应缴额!
告别“多类目叠加”,卖家该如何应对?
26年亚马逊头部卖家格局生变,中国卖家占比升至55.9%
截至2026年7月,中国卖家在亚马逊美国站前10000名卖家占比已提升至55.9%,美国卖家则降至40.5%。仅过去12个月,中国卖家的份额就提升了3.8%。
紧急调整!美国CPSC法规给卖家暂时“松绑”了
在跨境电商迈入升级赛道的当下,合规化浪潮正以迅雷不及掩耳之势席卷整个行业。一系列政策法规如同多米诺骨牌般接连落地,逐渐渗透到跨境电商产品质检、税务申报、物流清关等流程。其中在近期讨论热度最高的,莫过于美国最新生效的CPSC法规。进入7月以来,CPSC电子申报(eFiling)新规在业内被高频提及。据业内消息,按原定计划,自7月8日起,美国消费品安全委员会(CPSC)将联合美国海关与边境保护局(CBP)全面施行电子申报(eFiling)新规,所有受CPSC监管的进口消费品需在清关前完成GCC/CPC合格证书电子申报,未按要求申报可能导致清关延误或货件被拒、退运。
AMZ123会员专享丨7月第2周资讯汇总
亚马逊亚马逊宣布与MyFlexBox达成战略合作,其德国所有智能快递柜将接入亚马逊配送体系,并成为欧洲首个向亚马逊开放的大规模中立柜机网络。用户在结账时可选24/7自提点,提升取件灵活性。合作旨在共建共享末端基础设施,覆盖零售点、加油站等场景,减少重复配送、提高效率。7月6日曝光的官方文件显示,亚马逊在华盛顿州新一轮裁撤57个岗位,涉及多条业务线,其中包含总监、高级经理等中高层管理岗。7月7日,亚马逊宣布,亚马逊全球智能枢纽仓正式落地华东地区,上海、宁波双仓正式启用。这是继GWD深圳首仓全面运营后,亚马逊在完善跨境物流网络上的又一关键布局。
每15秒售出一件,TikTok Shop英国宠物品类快速增长
TikTok Shop公布数据显示,2025年平台宠物护理品类销售额同比增长超过60%,宠物用品正在成为平台增长较快的消费类别之一。在英国市场,TikTok Shop平均每15秒售出一件宠物产品,宠物食品相关内容也持续增加,其中猫粮相关帖子数量超过82.5万条,狗粮相关帖子数量超过57.2万条。
26年1-4月美国玩具市场销售额增长13%,女性成为主力
2026年1月至4月期间,美国玩具行业超过一半的增长来自女性消费者。同时,18岁及以上成年消费者贡献了整个玩具行业35%的增长,成人消费正在成为推动市场扩张的重要因素。
Ozon计划26年新增15个物流中心,投资超300亿卢布
俄罗斯电商平台Ozon表示,2026年计划在俄罗斯新增15个物流综合设施,其中包括大型全流程履约中心以及用于存储和处理大件商品的物流设施。
TikTok美区推行三级架构保证金,风险保证金最高$10000
重磅!TikTok美区新增保证金,卖家速查后台
26年巴西情人节消费达220亿雷亚尔,服饰美妆成热门品类
2026年巴西情人节(Dia dos Namorados)消费超过220亿雷亚尔,服装、化妆品、香水和鞋类成为最受关注的消费品类。
《全球宠物行业趋势与中国增长机遇报告》PDF下载
宠物行业全年的销售额为660亿美元与去年同期相比增长了2.1%。
《TikTok Shop 2024-2025 西班牙站点报告》PDF下载
在全球社交电商高速发展的时代浪潮中,TikTok已然崛起为品牌与消费者深度互动的重要阵地。TikTok不仅重塑了用户的消费习惯,更开创了"发现式购物"的新模式,为品牌营销带来了前所未有的机遇与挑战。
《2026年全球电商行业趋势洞察报告》PDF下载
报告深度解读 2026 年全球电商行业发展趋势,全面剖析移动端与网页端市场格局、各区域网站流量增长动态,以及综合电商、服饰电商、美妆电商等核心赛道的细分趋势与头部玩家表现。报告同步收录标杆案例,拆解Nykaa、0live Young、UNIQLO 等区域头部电商的业务亮点、广告策略与用户画像,为品牌制定精准市场策略提供决策参考。
《2026年电子元器件行业趋势与策略解读》PDF下载
据世界半导体贸易统计组织(WSTS)预测报告显示,2025年全球半导体营收将同比增长22.5%至7720亿美元,2026年将再度增长26.3%至9750亿美元,逼近1万亿美元大关;
《2025-Q1亚马逊沃尔玛全球电商CPC数据报告》PDF下载
我们整合了Pacvue和Helium 10的专有数据库,全方位展示行业内范围最广的电商数据。这份报告包括数万家大中小型规模,不同品类广告主的数据,以及几个主要品类的详细分析。
《男装休闲服装品类2026秋冬趋势报告》PDF现在
服装买家高度关注市场趋势,具有高频复购的特点,对趋势品的诉求相对更高,对于新品至少提前2-3个月进行采购且主要通过社媒获取服装趋势;
《美客多趋势报告-智利站》PDF下载
在当今的消费环境中,每一次购物都成为消费者身份的体现,反映出消费者的兴趣、欲望和价值观。这些选择受到时代和文化的影响,不仅展现了消费者的偏好,也塑造了消费者与市场的关系。
《拉美八国经贸与投资概览》PDF下载
中国与古巴1960年建立外交关系,正式开启了中国与拉美地区合作的新纪元。截至目前,中国已与26个拉美和加勒比国家建立外交关系,并同其中22个国家签署了共建“一带一路”合作文件,关系不断深化。
欧洲电商资讯
AMZ123旗下欧洲跨境电商新闻栏目,专注欧洲跨境电商热点资讯,为广大卖家提供欧洲跨境电商最新动态、最热新闻。
亚马逊公告
AMZ123旗下亚马逊公告发布平台,实时更新亚马逊最新公告,致力打造最及时和有态度的亚马逊公告栏目!
跨境学院
跨境电商大小事,尽在跨境学院。
AMZ123卖家导航
这个人很懒,还没有自我介绍
跨境电商赢商荟
跨境电商行业唯一一家一年365天不断更的媒体!
跨境数据中心
聚合海量跨境数据,输出跨境研究智慧。
亚马逊资讯
AMZ123旗下亚马逊资讯发布平台,专注亚马逊全球热点事件,为广大卖家提供亚马逊最新动态、最热新闻。
跨境平台资讯
AMZ123旗下跨境电商平台新闻栏目,专注全球跨境电商平台热点事件,为广大卖家提供跨境电商平台最新动态、最热新闻。
首页
跨境头条
文章详情
咨询
官方微信群
官方客服

扫码添加,立即咨询

加群
官方微信群
官方微信群

扫码添加,拉你进群

更多
订阅号服务号跨境资讯
二维码

为你推送和解读最前沿、最有料的跨境电商资讯

二维码

90% 亚马逊卖家都在关注的微信公众号

二维码

精选今日跨境电商头条资讯

回顶部