爬虫实战【6】Ajax内容分析-先天头长达图集

Ajax的应用

下XHTML+CSS来抒发资讯;
使用JavaScript操作DOM(Document Object Model)来实施动态效果;
利用XML和XSLT操作资料;
运用XMLHttpRequest或新的Fetch API与网页服务器进行异步资料交流;
只顾:AJAX与Flash、Silverlight和Java Applet等RIA技术是暴发分另外。

眼下时有暴发不少以ajax的动案例,比如乐乎和讯,google地图,先天条久等。
明天我们借助今日头长条见一下ajax内容的分析,怎么着爬取这仿佛网站的情节。

Ajax,2、对json内容展开解析

import json
def parse_page_index(html):
    data=json.loads(html)
    result=[]
    if data and 'data' in data.keys():
        for item in data.get('data'):
            article_url=item.get('article_url')
            if article_url and ('group' in article_url):
                result.append(article_url)
    return result

因即便解析json内容,所以导入了json库。
咱设得到的凡json内容中,data标签下各项里面的article_url信息,所以设置了部分罗,data音讯遭一定要含有’data’关键字才开分析。
是因为我们想如果图集,固然设置了cur_tab为3,然则回去的部分url如故匪顶正统,大家在url中装置必要含有group字符串,才可以当做图集。
接下来将每个url都抬高到result列表中。

Index页的源代码

假使我们寻找足球首要字(哈哈,不找美人了。。。),大家看一下网页的源代码是呀动静。
【插入图片,index源代码】
Ajax 1

源代码中除了有着力的html标签,就是各样js了,没有我们想念倘使的一部分url内容或图集的信息。
点说过了,前几天条条利用了ajax技术来加载内容,那么按照ajax技术之特色,肯定有一部分数据会从服务器发送到大家的浏览器上,否则网页不会见显出这个图集的情。
那这些多少在哪个地方吧?

3、开启多进程运行

from multiprocessing import Pool
def main(offset):
    html=get_page_index(offset)
    for url in parse_page_index(html):
        print(url)

if __name__=='__main__':
    p=Pool()
    p.map(main,[i*20 for i in range(3)])

我们先开辟3单页面尝试一下,接纳多进程可以赶紧一些,即便现在代码少,但是理念而控。
【插入图片,url结果】
Ajax 2

OK,明日就是先到此处,明天更持续说道一下如何以那个url中落图片。

Ajax 3

Ajax加载的数目在哪?

开辟浏览器的调节,请选用网络标签,拔取XHR内容,看下出现的几乎独公文。
【插入图片,咋样开辟ajax加载的情节】
Ajax 4

咱俩看就几乎个文本之类型,都是json格式的。
再看search_content的类容,除了offset的值改变止呕,其他依旧平等的。因为我们滚动过页面了,每页正好显示20起内容,想必读者一下子即便可知分晓这多少个offset的始末,就是用来加载多单页面的控制器。
咱看一个search_content的音信头:
【插入图片,json的音讯头】
Ajax 5

此刻一个get请求,我们得以就此requests库的get方法直接来呼吁到json文件。可是url的情节是吗啊?
我们看一下及图中之三只参数,尤其是终极的cur_tab设置为3,因为3才代表的精选的是图集,1之语句是综合,2是录像,上边提到了。
大家若反中的offset参数,就会拿到四个页面,每页20个内容。
咱俩再次来拘禁一下响应内容:
【插入图片,json的响应信息】
Ajax 6

坐凡json格式的始末,里面都是有key:value格式的内容,大家要关心data上面的20只内容,每个内容被还饱含article_url关键字音信,这多少个音讯就是是打开每个图集的url,大家经过这几个url就会访问具体的图集了。

关于网站分析的情节先天即便称到这边,大家重新来拘禁一下代码,怎么着取得这个每个图集的url。

前天头长条的物色功效

前方几乎天从来上不齐前日头修,预计网络监管最严,很多咨询类服务商都down掉了。。。
前天终可以开拓了,赶紧来讲一下ajax的情。
【插入图片,先天头长之摸索效果】
Ajax 7

点图片被可看出利用先天条久搜索一些重要字,可以回来很多情节,请圈六个标签,综合、视频、图集和用户,大家今天开腔一下图集。也即便是签选项卡设置为图集,怎么样设置后会摆了解。

Ajax技术

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
Ajax并无是初的编程语言,而是同种下现有标准的初章程,当然也非是老大新了,在97年左右,微软即注脚了ajax的关键技术,可是连没放;随着Googleeath、google suggest和gmail的广泛应用,ajax才起来流行起来。
ajax最充裕之长处是于不重加载整个页面的情景下,可以跟服务器交流数据并革新网页的有的内容。
ajax不欲其他浏览器插件,可是要用户同意javascript的推行。

1、获取index页面的json内容

import requests
from urllib.parser import urlencode
def get_page_index(offset):
    #cur_tab标签一定要写正确,3才代表图集,很重要
    data={
        'offset':offset,
        'format':'json',
        'keyword':'足球',
        'autoload':'true',
        'count':'20',
        'cur_tab':'3'
    }
    url='https://www.toutiao.com/search_content/?'+urlencode(data)
    try:
        response = requests.get(url)
        if response.status_code==200:
            #print(response.text)
            return response.text
        else:
            return None
    except Exception:
        print('请求索引页出错!')
        return None

俺们安了一个offset参数,这样虽可知说了算得哪一个页面,也便是兑现自动往下滑动的效用。
data是我们以get请求时url的参数内容,我们用一个字典来代表,使用urlencode来编码。
以此访问如故丰富顺利的,并从未重新提交额外之header参数。

相关文章