使用python爬取ajax异步请求(Form Data)数据并输出excel表格中

最近有同学需要爬取一网页的中的表格,但是实际操作中遇到所要抓取的数据在另一框架中table标签中,切换不同页码,实际的url不会变化,下面主要分难点解决、代码展示和代码结构解析三部分讲述。
一、难点解决
(1)原始网页
在这里插入图片描述
(2)疑惑
要获取的数据为ajax异步请求,切换页码,网页的url也未发生变化,使用switch_to.frame也未获取信息。
几经折腾,通过开发者工具获取到异步请求的url,详见下图:
在这里插入图片描述
在这里插入图片描述
通过观察,可以看到url中包含page的参数,代码中将url进行拼接,从而实现全部表格的获得。
二、代码展示
#coding=utf-8

from bs4 import BeautifulSoup
from urllib import request
import xlwt

def get_text(url):
“”"
:param url:
:return: r.text
“”"

#该函数功能:获取html文本信息
response = request.urlopen(url,timeout = 30)
html =response.read()
html_text = html.decode("utf-8")
return  html_text

def get_datas(datas,html_text):
“”"
该函数主要实现获取表格中的数据
:param datas: 存放以前表格中数据,本次在里面继续追加
:param html_text: 本次网页html文档信息
:return:
“”"
soup = BeautifulSoup(html_text,“html.parser”)

#第一步:定位到table
table = soup.find_all("table")
#第二步:定位到tr
tab = table[0]
for tr in tab.findAll('tr'):
    data = []
    for td in tr.findAll('td'):
        td_text = td.getText()
        if td_text in ['证书编号', '资质类型', '企业名称', '资质资格序列', '专业类别', '资质资格等级']:
            continue
        else:
            data.append(td_text)
    if data == []:
        continue
    else:
        datas.append(data)
return datas

def write_xls (datas):

book = xlwt.Workbook()
sheet1 = book.add_sheet("sheet1",cell_overwrite_ok= True)

i = 0
for list in datas:
    j = 0
    for data in list:
        sheet1.write(i,j,data)
        j += 1
    i += 1
book.save("资料.xls")
print("保存完成")

def main():
total_pages = 10
#datas用于存放数据的列表
datas = [[‘证书编号’, ‘资质类型’, ‘企业名称’, ‘资质资格序列’, ‘专业类别’, ‘资质资格等级’,""]]
for page in range(total_pages+1):
url= “http://XXXXX?page="+str(page)+"&channelid=264649&perpage=15&outlinepage=10&zsbh=&qymc=&zzlx=
html_text = get_text(url)
datas = get_datas(datas,html_text)
print(datas)

write_xls(datas)

if name == “main”:
main()
三、代码结构
代码主要包含
(1)主函数:main()
主函数逻辑:
定义初始化参数:total_pages(总共需要遍历的页数);datas(用来存放爬取的数据,由于表格中每个表格中都有表头,直接将表头初始化,之后每一页不再存储表头)
|
for循环遍历每一页:每一页先获取html文本——》获取文本中详细数据函数
|
执行完毕后,将数据写入excel文件函数:write_xls (datas)

(2)获取html文本信息函数:get_text(url)
该模块使用request模块,打开url并获取html文本

(3)获取文本中详细数据函数:get_datas(datas,html_text)
使用beatifulsoup进行网页信息的解析,通过table——》tr——》td逐级进行定位,最终使用getText()的方法获取文本信息。

(4)将数据写入excel文件函数:write_xls (datas)
使用xlwt模块,进行将列表datas写入excel中,代码使用双重for循环实现即可。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些指导。 首先,您需要使用 Django 框架来搭建您的网站。您可以先安装 Django,然后创建一个新的 Django 项目。 接着,您可以创建一个注册和登录的应用。在这个应用,您可以创建一个名为 `views.py` 的文件,用于处理用户注册和登录的请求。您可以使用 Django 自带的表单验证来验证用户输入的信息是否正确。 在用户注册时,您需要从前端页面获取用户输入的信息,并将其保存到数据。在用户登录时,您需要从前端获取用户输入的用户名和密码,并将其与数据的信息进行验证。 对于登录和注册,您可以使用 ajax 技术,从前端向后端发送异步请求来进行处理。在 `views.py` ,您可以使用 Django 的 `JsonResponse` 对象来返回处理结果。 下面是一个简单的示例代码: ```python from django.shortcuts import render from django.http import JsonResponse from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import User def register(request): # 获取用户输入的信息 username = request.POST.get('username') password = request.POST.get('password') email = request.POST.get('email') # 创建新用户并保存到数据 user = User.objects.create_user(username=username, password=password, email=email) user.save() # 返回处理结果 return JsonResponse({'status': 'success'}) def login(request): # 获取用户输入的信息 username = request.POST.get('username') password = request.POST.get('password') # 验证用户名和密码是否正确 user = authenticate(request, username=username, password=password) if user is not None: # 登录成功 login(request, user) return JsonResponse({'status': 'success'}) else: # 登录失败 return JsonResponse({'status': 'fail'}) ``` 在前端页面,您可以使用 jQuery 来向后端发送异步请求,并处理返回的结果。 下面是一个简单的示例代码: ```html <form id="register-form"> <input type="text" name="username"> <input type="password" name="password"> <input type="email" name="email"> <button type="submit">注册</button> </form> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function() { $('#register-form').submit(function(event) { event.preventDefault(); var form_data = $(this).serialize(); $.ajax({ url: '/register/', type: 'POST', data: form_data, dataType: 'json', success: function(data) { if (data.status === 'success') { alert('注册成功'); } else { alert('注册失败'); } } }); }); }); </script> ``` 类似地,您可以创建一个登录的表单,并使用类似的方式进行处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值