澳门至尊网站-首页

您的位置:澳门至尊网站 > 程序编程 > Ajax结果提取

Ajax结果提取

2019-10-25 08:28

以博客园为例,接下去用Python来模拟那一个Ajax需要,把作者发过的乐乎爬取下来。

1. 拆解深入分析央浼

打开Ajax的XH酷威过滤器,然后径直滑动页面以加载新的天涯论坛内容。能够看见,会不停有Ajax央浼发出。

选定当中二个伸手,解析它的参数新闻。点击该央浼,步入详细情况页面,如图6-11所示。

图片 1

能够窥见,那是二个GET类型的央浼,央求链接为[

继之再看看其余诉求,能够窥见,它们的typevaluecontainerid从始至终。type始终为uidvalue的值就是页面链接中的数字,其实那就是客户的id。另外,还有containerid。能够窥见,它就是107603抬高客商id。修正的值就是page,很显著这几个参数是用来调整分页的,page=1意味着第大器晚成页,page=2代表第二页,依此类推。

2. 解析响应

从而,观看那几个恳求的响应内容,如图6-12所示。

图片 2

以此内容是JSON格式的,浏览器开拓者工具自动做了剖判以有援救我们查阅。能够观望,最首要的两片段新闻便是cardlistInfocards:前面一个带有三个相比较根本的音讯total,观看后方可开掘,它实际是新浪的总的数量据,我们得以依靠那个数字来打量分页数;后面一个则是三个列表,它满含13个成分,打开内部五个看一下,如图所示。

图片 3

能够窥见,这么些因素有三个十二分主要的字段mblog。展开它,能够窥见它包罗的难为微博的片段音信,比方attitudes_count(赞数目)、comments_count(商议数目)、reposts_count(转载数量)、created_at(公布时间)、text(今日头条正文)等,并且它们都以一些格式化的内容。

如此我们供给八个接口,就足以获得10条新浪,何况央浼时只供给更换page参数就能够。

那样的话,大家只必要轻便做贰个周而复始,就能够获得具有今日头条了。

3. 实战练习

此处大家用程序模拟这么些Ajax需要,将自己的前10页微博全体爬取下来。

率先,定义二个主意来得到每趟央求的结果。在央浼时,page是三个可变参数,所以大家将它当作艺术的参数字传送递进来,相关代码如下:

from urllib.parse import urlencode
import requests
base_url = 'https://m.weibo.cn/api/container/getIndex?'

headers = {
    'Host': 'm.weibo.cn',
    'Referer': 'https://m.weibo.cn/u/2830678474',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}

def get_page(page):
    params = {
        'type': 'uid',
        'value': '2830678474',
        'containerid': '1076032830678474',
        'page': page
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.json()
    except requests.ConnectionError as e:
        print('Error', e.args)

率先,这里定义了base_url来表示必要的U陆风X8L的前半部分。接下来,构造参数字典,当中typevaluecontainerid是定位参数,page是可变参数。接下来,调用urlencode()主意将参数转变为U大切诺基L的GET需要参数,即肖似于type=uid&value=2830678474&containerid=1076032830678474&page=2那般的样式。随后,base_url与参数拼合产生一个新的U大切诺基L。接着,大家用requests央求那一个链接,加入headers参数。然后剖断响应的状态码,倘诺是200,则平昔调用json()艺术将内容剖析为JSON重返,不然不回去任何新闻。如若现身万分,则捕获并出口其拾叁分音信。

接着,大家必要定义多个解析方法,用来从结果中领到想要的音讯,譬如此次想保留今日头条的id、正文、赞数、商议数和转载数那多少个内容,那么能够先遍历cards,然后拿走mblog中的各样音讯,赋值为三个新的字典重返就能够:

from pyquery import PyQuery as pq

def parse_page(json):
    if json:
        items = json.get('data').get('cards')
        for item in items:
            item = item.get('mblog')
            weibo = {}
            weibo['id'] = item.get('id')
            weibo['text'] = pq(item.get('text')).text()
            weibo['attitudes'] = item.get('attitudes_count')
            weibo['comments'] = item.get('comments_count')
            weibo['reposts'] = item.get('reposts_count')
            yield weibo

此间大家赖以pyquery将正文中的HTML标签去掉。

最终,遍历一下page,豆蔻梢头共10页,将提取到的结果打印输出就可以:

if __name__ == '__main__':
    for page in range(1, 11):
        json = get_page(page)
        results = parse_page(json)
        for result in results:
            print(result)

除此以外,大家还足以加多个格局将结果保存到MongoDB数据库:

from pymongo import MongoClient

client = MongoClient()
db = client['weibo']
collection = db['weibo']

def save_to_mongo(result):
    if collection.insert(result):
        print('Saved to Mongo')

如此那般全体机能就兑现存功了。运维程序后,样例输出结果如下:

{'id': '4134879836735238', 'text': '惊不惊喜,刺不刺激,意不意外,感不感动', 'attitudes': 3, 'comments': 1, 'reposts': 0}
Saved to Mongo
{'id': '4143853554221385', 'text': '曾经梦想仗剑走天涯,后来过安检给收走了。分享单曲 远走高飞', 'attitudes': 5, 'comments': 1, 'reposts': 0}
Saved to Mongo

查看一下MongoDB,相应的数额也被保留到MongoDB,如图所示。

图片 4

那般,大家就高枕无忧通过深入分析Ajax并编写爬虫爬取下来了博客园列表,最后,给出本节的代码地址:。

本节的指标是为着演示Ajax的效仿须求进程,爬取的结果不是尤为重要。该程序依然有无数足以全面包车型大巴地点,如页码的动态计算、新浪查看全文等,若感兴趣,能够品尝一下。

经过这么些实例,我们第大器晚成学会了何等去深入分析Ajax诉求,如何用程序来模拟抓取Ajax诉求。领悟了抓取原理之后,下焕发青新春的Ajax实战练习会越发贯虱穿杨。

本文由澳门至尊网站发布于程序编程,转载请注明出处:Ajax结果提取

关键词: