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

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

任佳伟
任佳伟
14363
2018-09-21 11:13
2018-09-21 11:13
14363


通过前面几期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跨境头条,如有疑问,请联系客服。
最新热门报告作者标签
亚马逊德国将提高Prime配送速度要求
根据新规,对于德国站的标准尺寸商品和低价商品,亚马逊卖家需要满足新的配送时效要求:15%的订单必须在最多1天内送达;50%的订单必须在最多2天内送达;80%的订单必须在最多4天内送达。
Zalando将关闭德国埃尔福特物流中心
德国时尚电商平台Zalando计划于2026年9月底正式停止运营位于德国埃尔福特的物流中心,届时约2700名员工将失去工作。
使用率达52%!Temu等平台更受南欧消费者欢迎
欧洲央行(ECB)最新消费者调查显示,AliExpress、Banggood、Shein、Temu等中国电商平台在南欧的受欢迎程度明显高于欧洲平均水平。
38柜退运、亏损超1000万!深圳货代公开催款
深圳货代亏损超1000万!美线退运潮持续发酵
深圳“翻译神器”上线TikTok美区60天,已卖400万
28天出单上百万,TikTok美区又杀出国产3C爆款
拼多多发布2026年Q2财报,净利润下降11.61%!
AMZ123获悉,8月24日,拼多多公布了2026年二季度财报。报告期内,拼多多营收达1124亿元,同比增长8%,增速低于市场预期,归母净利润达271.82亿元,同比下降11.61%,Non-GAAP研发投入43亿元,同比增长40%。对于利润下滑的原因,拼多多称主要系平台生态持续加码投入,叠加海外非经营项目亏损影响。平台投入方面,拼多多仍在持续加强平台的合规建设及技术能力,二季度营业成本为480亿元,同比增长5%;运营费用合计为366亿元,同比增长13%。其中,销售与营销费用为297亿元,同比增长9%;研发费用为46亿元,同比增长27%;一般及行政费用为23亿元,同比增长53%。
沃尔玛广告主峰会下午场揭晓!三个分会场,深入旺季实战!
9月16日沃尔玛广告中国年度峰会将在深圳举行。上午场议程已公布,下午三大分会场也正式揭晓!按卖家经营阶段量身定制,实战、提效、增量、降本一次讲透,找到适配的旺季打法。立即报名,锁定席位。新星·引爆指南|面向旺季起量阶段的卖家旺季起量无从下手,这场「旺季起量指南」零门槛起步,从打法到案例全覆盖:· 起量打法全覆盖:从广告增长新打法到爆款三角增长论,系统拆解旺季起量核心逻辑。· 新品破零全拆解:从0到1新品起量指南,抓取第一波核心流量,实现快速破零。· 大促节奏全掌握:旺季前中后完整投放地图,搭配明星卖家13倍增长实战案例。· 广告组合打增量:多产品组合拳系统打法,把每一分预算都变成旺季实打实销量。
UPS拟投资超20亿美元,新建亚欧美洲物流枢纽
将持续向国际业务、医疗保健物流和供应链解决方案业务投入超过20亿美元。这项投资始于2024年,并将持续至2028年,覆盖欧洲、亚太地区和美洲等多个关键市场。
今日生效!亚马逊更新BSA,严禁私下转店及回款质押
这条新协议,直接堵死行业里长期存在的私下账号交易、回款质押融资这类灰色操作。
义乌又一“神仙单品”翻红,TikTok单条视频7天播放610万
自带墨镜的帽子走红TikTok,跨境卖家靠其赚到第一桶金
与安克同榜!它在亚马逊月销超10万单
近日,业内一份跨境电商品牌影响力排行榜显示,来自上海司顺电子商务有限公司的跨境品牌VEVOR位居第三,仅次于SHEIN、Anker等知名品牌,引起了业内关注。在消费电子、快时尚、家具家居等跨境电商热门品类的包围下,这家主营MRO工具设备类产品的上海大卖格外显眼。它是如何在工具这条冷门赛道里跑出规模增长的?本文将从平台运营、品牌塑造、营销策略等维度,深入拆解VEVOR的跨境电商打法。把时间的指针拨回2007年,VEVOR的创始人焦如宝最初做的其实是跨境服装生意。
强制生效倒计时8天,欧盟FBA入仓新规即将落地
建议各位卖家优先排查店铺爆款、高转化核心SKU对应的所有在途及仓内货件。
超52起受伤报告,CPSC召回4.1万亚马逊在售儿童秋千
美国消费品安全委员会(CPSC)紧急召回Taleco Gear品牌销售的Baby Jumper婴儿弹跳椅、Baby Swing婴儿秋千以及2-in-1 Baby Jumper & Swing二合一婴儿弹跳椅/秋千,原因是产品可能出现不稳定,存在跌落、撞击以及勒颈风险,严重时可能导致受伤甚至死亡。
销量暴涨797%,10万元激励寻找绿标增长先锋
进入下半年,秋季大促、黑五网一接连到来。对亚马逊卖家来说,旺季从来不缺流量,真正稀缺的是:如何在竞价越来越贵、同质化越来越强的情况下,让消费者更快看见并相信你的产品。亚马逊气候友好认证(ClimatePledgeFriendly,简称CPF)之所以被越来越多卖家关注,正是因为它同时连接了三个卖家关心的问题:前台绿色标识、消费者信任,以及平台部分推荐场景中的差异化展示机会。但卖家最关心的并不是概念,而是结果:上了绿标到底有没有增长?中型卖家是否也有机会?现在启动还能不能赶上旺季?第一期“绿标先锋计划”给出了一组值得关注的答案。
改完标题排名就下滑,亚马逊卖家到底该不该慌?
正文最近不少卖家发现标题刚改完类目排名就开始忽上忽下有的停滞,有的突然跳水这时候最容易做错的事就是把一次波动直接认定成降权改完标题排名乱了先别急着回滚近期卖家社群里,出现了不少相似反馈:标题结构调整后,BSR长时间不更新,或者爆款名次在短时间内来回跳动;有的链接曝光、订单同步下滑,有的却只是排名震荡,几天后又回到原来的区间。这些案例说明问题值得排查,但目前不能仅凭个别链接的时间重合,断定亚马逊已经对“关键词移出标题”统一降权。
Ozon俄罗斯两座物流中心被无人机袭击
乌克兰无人机袭击了Ozon俄罗斯的两处物流中心,这是乌克兰首次袭击Ozon设施。
《独立站驱动全渠道整合新增长报告》PDF下载
伴随行业竞争加剧,全球化品牌正展现出愈发广泛和深入的进攻态势发力海外市场,持续追求产品、流量、渠道及服务的升维化与精细化。全渠道整合商业(Unified Commerce),即以独立站为核心,连接第三方平台、B2B、社交网络及零售实体等其他渠道,实现全渠道整合、全场景覆盖及全触点渗透。
《TikTok shop 2026全站点H1报告》PDF下载
分析TikTok Shop全球主流市场短视频及直播电商数据,选取TikTok2026年2026年H1相关内容进行分析报告
《2025产业带数智化跨境发展报告》PDF下载
根据统计口径不同,中国产业带数量在281-1100个之间,有超600万家制造企业,制造业产值占全球的35%,产能出口刚需强。按照海关总署重点商品统计口径,2024年我国以省域为单位测算货物出口规模超过千亿的产业集群共有35个,合计出口6.35万亿元,占我国货物出口总量的24.96%。在强烈的出口刚需下,正在萌发多种创新模式,激活产业带工厂出海。
《2024出海区域国别报告》PDF下载
近年来,中国已成为拉丁美洲日益重要的贸易伙伴和投资者。中国在该地区的贸易与投资给多个拉美国家经济增长带来机遇,拉美地区对与中国接触有着浓厚兴趣。
《TikTok Shop2026全站点Q1季报》PDF下载
2026年第一季度,TikTok Shop在全球(基于所提供的10个站点数据)继续保持强劲的增长态势总GMV已达274.53亿美元。整体市场呈现出核心市场GMV体量巨大、新兴市场爆发式增长的特征美国站以69.85亿美元的GMV稳居榜首,对比25年第一季度增长了66%。
《2026 欧盟绿色供应链合规报告》PDF下载
近年来,欧盟绿色供应链合规规则正加速成型。欧盟不再以产品是否符合技术标准作为市场准入条件,而是进一步要求企业说明其生产过程、供应链管理、资金来源和数字化应用是否符合欧盟规则。由此,欧盟内部市场正在成为其推行单边主义、实施经济胁迫的重要制度工具。
《2025中国AI企业出海系列研究:印尼篇》PDF下载
作为印尼最大的贸易伙伴和首要出口目的地,中国为印尼经济增长注入了强劲动能;与此同时,印尼已成为中国在东南亚地区的重要贸易伙伴和优先投资目的国,为中国企业提供广阔市场与丰富资源。紧密的经贸纽带共同推动了双边贸易的持续繁荣。
《2024跨境供应链洞察报告》PDF下载
当前,全球化商业浪潮推动着跨境电商行业迅猛发展,产业带接轨跨境电商、平台半托管模式兴起、社交电商红利机会以及海外仓扩张,驱动产业带外贸工厂、内贸工厂、传统进出口企业及品牌企业等加速布局跨境电商,赛道繁荣也加剧了供给侧竞争。
AMZ123选品观察员
选品推荐及选品技巧分享。
跨境学院
跨境电商大小事,尽在跨境学院。
亚马逊公告
AMZ123旗下亚马逊公告发布平台,实时更新亚马逊最新公告,致力打造最及时和有态度的亚马逊公告栏目!
AMZ123星球
「AMZ123会员」为出海者推出的一站式私享服务
跨境数据中心
聚合海量跨境数据,输出跨境研究智慧。
AMZ123卖家导航
做跨境电商,就上AMZ123
欧洲电商资讯
AMZ123旗下欧洲跨境电商新闻栏目,专注欧洲跨境电商热点资讯,为广大卖家提供欧洲跨境电商最新动态、最热新闻。
北美电商资讯
AMZ123旗下北美跨境电商新闻栏目,专注北美跨境电商热点资讯,为广大卖家提供北美跨境电商最新动态、最热新闻。
首页
跨境头条
文章详情
热门活动
跨境资讯
跨境资讯
跨境早报
跨境社群
品类交流群
宠物品类交流群宠物品类交流群
加入
宠物品类交流群
扫码进群
家居品类交流群家居品类交流群
加入
家居品类交流群
扫码进群
母婴用品交流群母婴用品交流群
加入
母婴用品交流群
扫码进群
品类交流群
加入
跨境资料
亚马逊运营干货包亚马逊运营干货包
加入
亚马逊运营干货包
扫码进群
TikTok运营干货包TikTok运营干货包
加入
TikTok运营干货包
扫码进群
跨境电商行业报告跨境电商行业报告
加入
跨境电商行业报告
扫码进群
跨境资料
加入
官方社区
跨境电商交流群跨境电商交流群
加入
跨境电商交流群
扫码进群
亚马逊卖家交流群亚马逊卖家交流群
加入
亚马逊卖家交流群
扫码进群
独立站卖家交流群独立站卖家交流群
加入
独立站卖家交流群
扫码进群
官方社区
加入
AMZ123官方客服二维码1
立即扫码咨询
AMZ123官方客服二维码2
立即扫码咨询
咨询
官方微信群
官方客服

扫码添加,立即咨询

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

扫码添加,拉你进群

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

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

二维码

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

二维码

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

回顶部