利用requests库爬取Ajax数据

1.Ajax是什么?

Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Ajax 通过在后台与服务器进行少量数据交换,使网页实现异步更新。这意味着可以在不影响网页当前显示内容的情况下,与服务器进行通信并更新部分网页内容。

Ajax 的工作流程通常如下:

  1. 用户触发一个事件(如点击按钮)。
  2. JavaScript 创建一个 XMLHttpRequest 对象。
  3. XMLHttpRequest 对象向服务器发送请求。
  4. 服务器处理请求并返回数据。
  5. JavaScript 接收服务器返回的数据,并使用 DOM 更新网页的部分内容。

2.分析请求

我们这里以微博为例,访问任一一博主,分析请求:
① 进入开发者工具,然后筛选请求,查看此次目标响应 xhr 

② 通过查看各个文件,我们发现Name为mymblog中包含了此次想要获取的数据(微博内容,点赞数,评论数等等)

③ preview会将response的内容格式化,利于查看。可以发现,该xhr文件是一个data字典,里面包含了此次的目标内容。

3.分析响应

① 我们继续分析响应,发现返回内容是application/json, text/plain, */*,但是我们只需要筛选出来的xhr类型,也就是json文件内容。所以请求头我们需要设置Accept

② 我们滑动页面向下(直至出现下拉加载页面),发现多了很多mymblog文件

③ 进一步分析其url,发现url其实是由page来决定显示多少条微博的,每一list里面都存放了20条微博数据

④ 最后整合思路:利用Request URL的规律构造最终url --> 采取get请求并且添加Accpet为json类型(因为我们想获取的数据就是一个json字典) --> 利用字典的方法提取数据即可 --> 保存数据至MySql数据库中

3.完整代码

import requests
import pymysql
import math


url = 'https://weibo.com/ajax/statuses/mymblog?uid=1195242865&page={page}&feature=0'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36',
    'Accept': 'application/json'
    'cookie':'SINAGLOBAL=6612396656384.904.1678890363091; SCF=Ah07cZCYPD3ziT1y-BA3xngQrf_fhL-e0_nm2aVTskX1F6OYw6Cj9jP1ECs9YPygzhY9bb1q3SRCaLpTdp3MHjM.; XSRF-TOKEN=yVElx-BbkJU5MHZVoMM8Ey6n; _s_tentry=weibo.com; Apache=705629895373.594.1719584390695; ULV=1719584390742:5:2:2:705629895373.594.1719584390695:1719395830106; SUBP=0033WrSXqPxfM72wWs9jqgMF55529P9D9WhclDH4u.OIbM8rAJTr128z5JpVF02N1hB01h24e0B4; SUB=_2AkMRI1FjdcPxrAVTkfwXz2jkaYlH-jyi9jiVAn7uJhMyAxh87mglqSVutBF-XG7gIeZ3FvChi7-2MLihIH4BmdnP; WBPSESS=Dt2hbAUaXfkVprjyrAZT_Nwg9OgWrNgORcosnibGyT40gePTDd6KA1S2msZYoXC9RjJrTJpipifQgPfifnt4_BUJg23wrL88M1w5Oi_r2EaTxMfsz-J3aVRhXr7zj6o-KrXKbVzMap0OkqQhC7UhDg=='
}
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)
cursor = db.cursor()
cursor.execute('use spiders')
print('数据库连接成功!')

# 构造request url
def scrape_api(page):
    Json_url = url.format(page=page)
    print(f'现在开始爬取:{Json_url}')
    return Json_url

# 从json字典中提取数据
def get_data(url):
    response = requests.get(url=url, headers=headers)
    data = []
    if response.status_code == 200:
        content = response.json()
        text = content['data']['list']
        for i in range(len(text)):
            current_list = text[i]
            one_data = {
                '微博内容':current_list.get('text_raw'),
                '评论数':current_list.get('comments_count'),
                '点赞数':current_list.get('attitudes_count'),
                '转发数':current_list['number_display_strategy'].get('display_text')
            }
            data.append(one_data)
    else:
        print("status不为200!")
    return data

# 存放数据至MySql中
def save_data(data):
    sql = "insert into weibo(content,comments_count,attitudes_count,display_text) values (%s, %s, %s, %s)"
    for i in range(len(data)):
        wait_insert_data = (
            data[i].get('微博内容')[:1000],
            data[i].get('评论数'),
            data[i].get('点赞数'),
            data[i].get('转发数'),
        )
        try:
            cursor.execute(sql, wait_insert_data)
            db.commit()
        except Exception as e:
            print(f'数据存储失败,原因是:{e}')

def main():
    page_number = math.ceil( int(input('你需要爬取多少条微博:')) / 20 )
    for i in range(1,page_number+1):
        Json_url = scrape_api(i)
        data = get_data(Json_url)
        if data:
            print(f'爬取完成{i * 20}条微博')
            save_data(data)
        else:
            break
    db.close()

if __name__ == '__main__':
    main()

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 腾讯热力图数据爬取CSDN的过程可以分为以下几个步骤。 首先,我们需要准备爬取腾讯热力图数据的工具和Python语言提供了许多用于数据爬取,如BeautifulSoup和Scrapy。我们可以通过这些来解析网页,提取所需的数据。 其次,我们需要找到腾讯热力图数据的来源网址。通过分析腾讯热力图的网页,我们可以发现数据通常是通过Ajax请求获取的。因此,我们需要找到这个Ajax请求的URL。 接下来,我们使用Pythonrequests发送GET请求到腾讯热力图数据的URL。这个URL包含一些查询参数,例如时间范围和城市。我们可以根据需要修改这些参数,以获取不同的数据。 然后,我们解析腾讯热力图数据的响应。根据请求返回的格式,我们可以使用JSON解析解析响应,将数据转换为Python对象。 最后,我们将解析得到的数据存储到CSDN。可以使用PythonMySQL或MongoDB等数据数据保存到数据中,也可以将数据保存为文本文件或Excel文件。可以根据需要进行相应的数据处理和清洗,以便更好地分析和利用这些数据。 总结起来,爬取腾讯热力图数据需要先准备爬取工具和,然后找到数据的来源网址,发送请求获取数据,解析响应得到数据,最后将数据存储到CSDN或其他地方。这个过程需要一定的Python编程技巧和数据处理能力。 ### 回答2: 腾讯热力图数据爬取CSDN是一种获取并分析CSDN用户行为数据的方式。腾讯热力图是一种用于可视化用户点击量、鼠标滚动等操作的热图工具,而CSDN是一个面向程序员的IT技术社区,这两者的结合可以帮助我们更好地了解CSDN用户的行为模式和偏好。 为了实现腾讯热力图数据爬取CSDN,我们可以使用Python编程语言结合相关的网络爬虫进行开发。首先,在编写爬虫程序之前,需要明确我们想要获取的数据信息,比如用户点击量、浏览时长等。 其次,我们需要模拟浏览器的行为,以便能够正常访问CSDN网站并获取数据。可以使用第三方,如Selenium,来模拟用户操作,比如点击、滚动等,以触发腾讯热力图的生成。 然后,我们需要解析CSDN网页上的数据,提取相关的信息。可以使用Python中的BeautifulSoup或者正则表达式来处理HTML页面,并将热力图数据提取出来。 最后,将爬取数据进行存储和分析。可以将数据保存到数据中,比如MySQL或者MongoDB,并使用数据分析工具如Matplotlib进行数据可视化和进一步的分析。 需要注意的是,进行网站数据爬取时需要遵守相关的法律法规和网站的服务协议。请确保在爬取数据前已经获取了合法的许可或者授权,并遵守网站的访问频率限制,以避免对网站的影响或触发安全机制。 通过腾讯热力图数据爬取CSDN,我们可以更深入地了解CSDN用户的行为习惯和兴趣,为网站的优化和改进提供依据,同时也可以为广告投放、数据挖掘、用户画像等领域提供有价值的数据支持。 ### 回答3: 腾讯热力图是指腾讯公司推出的一项数据可视化工具,能够将数据以热力图的方式展示,用于分析用户行为和流量分布。而csdn是一个社区平台,提供了大量的技术文章、博客和问答等内容。 如果要进行腾讯热力图数据爬取csdn的操作,可以通过以下步骤进行: 1. 获取目标网页:使用Python的爬虫,如Scrapy或BeautifulSoup,通过URL访问csdn的网页并获取HTML源码。 2. 解析HTML源码:利用HTML解析,如BeautifulSoup或lxml,解析获取到的HTML源码,找到感兴趣的数据所在的位置和标签。 3. 提取数据:根据HTML文件的结构和标签,使用解析提供的方法,将目标数据提取出来,可以是标题、作者、发布时间、阅读量等。 4. 清洗和整理数据:对提取到的数据进行清洗和整理,去除重复项、空白字符或不需要的标签等,将其整理成易于处理的数据格式。 5. 存储数据:可以选择将清洗后的数据存储到数据(如MySQL、MongoDB等)或保存为文本文件。 总之,腾讯热力图数据爬取csdn的过程主要包括获取网页、解析HTML源码、提取数据、清洗和整理数据以及存储数据等步骤。通过这些操作,可以将csdn的相关数据用于后续的分析和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值