二十四. 异步加载

1. 异步加载技术(AJAX)

异步加载技术是一种创建交互式网页应用的网页开发技术,异步JaaScript和XML。使用这个技术,可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

  • 判断网页是否采用异步加载技术实现下滑分页:
    ① 通过下滑浏览网页,如果发现网页没有分页信息,而是一直浏览下去,但网址一直没变化。此时可认为网站采用了异步加载技术。
    ② 通过查看加载的数据是否在网页源代码中出现来进行判断。如果新加载的数据在网页源代码中没有查找到,可以认为采用了异步加载技术。

  • 通过Ajax技术除了可以实现下滑分页,还可以使用Ajax技术加载网页信息,例如简书网中的评论信息:
    **正文信息很容易抓取:

    image.png

    **评论信息如果还是按照原来网址https://www.jianshu.com/p/db6f9a7e1814来进行请求,是抓取不到的:
    image.png

抓取错误示例:

import requests
from bs4 import BeautifulSoup
url = 'https://www.jianshu.com/p/db6f9a7e1814'
r = requests.get(url)
print(r.status_code)

soup = BeautifulSoup(r.text,"lxml")
infos = soup.select("div.comment-wrap")
print(infos)

##结果为:[]

2. 逆向工程:

想要抓取上述异步加载的网页数据,需要了解网页进行加载这些数据的,这个过程叫做逆向工程。
在Chrome浏览器的Network选项卡中可以查看加载过程中的所有文件信息,通过对这些文件的查看和筛选,可找出需爬取数据所在的文件,以此来设计获取爬虫信息。
因此,逆向工程俗称为“抓包”。

简单例子如下:
目标网址:https://www.pexels.com/
①打开网页,使用F12或右键点击“检查”功能进入开发者工具选项。选择Network选项卡。

image.png

②由于大多数分页文件位于XHR中,选中XHR选项,并通过鼠标下滑浏览网页,会发现Network选项卡中加载了一些文件信息。(XHR为可扩展超文本传输请求)


image.png

③打开第一个加载文件,可以看到请求的URL:


image.png

④尝试将URL的部分字符串缩短,可发现使用下述网址即可正常打开网页:https://www.pexels.com/?page=2

image.png

⑤观察网页分页规律,即可发现请求的URL仅该表了page后面的数字。利用此规律可以爬取大量图片。与前面的“十五. API实战 - 调用有道智云API爬取pexels图片”有些区别,代码如下:

import requests
from bs4 import BeautifulSoup

def get_image(url):
    headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36'}
    r = requests.get(url,headers = headers)
    print(r.status_code)
    soup = BeautifulSoup(r.text,"lxml")

    infos = soup.select("img.photo-item__img")
    download_list = []
    for info in infos:
        image_url = info.get('src')
        download_list.append(image_url)
    for item in download_list:
        res = requests.get(item,headers = headers)
        file_name = item.split("?")[0][-10:].strip("-")
        with open("F://Pixels/"+file_name,'wb') as f:
            f.write(res.content)
        print(file_name)
    

if __name__ == "__main__":
    url_list = ["https://www.pexels.com/?page={}".format(i) for i in range(1,11)]
    for url in url_list:
        get_image(url)
    print("Finished!")

这样就通过抓包实现了对下滑分页的网址进行了数据抓取。
爬取图片结果为:


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容