写完python爬虫后运行不出结果

这个是运行后:

img


这个是项目要求:

img


以下是代码:

# -*- codeing = utf-8 -*-
# @Time : 2022/2/14 2:16
# @Author : 马辰宇
# @File : test.py

from bs4 import BeautifulSoup                                        #网页解析,获取数据
import re                                                            #正则表达式,进行文字匹配
import urllib.request,urllib.error                                   #制定URL,获取网页数据
import xlwt                                                          #进行Excel操作

def main():
    baseurl = "https://tousu.sina.com.cn"
    datalist = getData(baseurl)                                      #爬取网页
    savepath = "智芝全量化分析师笔试题 2。xls"
    saveDate(savepath)                                               #保存数据
    #askURL("https://tousu.sina.com.cn")
    findcontent = re.compile(r'<p>"(.*?)"</p>',re.S)                 #创建正则表达式对象,表示规则   #投诉内容
    findobject = re.compile(r'<ul class="list">(.*)</ul>',re.S)      #投诉对象和投诉要求
    findtime = re.compile(r'<span class="time">(.*)</span>',re.S)    #投诉时间

def getData(baseurl):                                                #爬取网页
    datalist = []
    for i in range(0,1):                                             #调用获取页面信息的函数,1次
        url = baseurl + str(i*1)
        html = askURL(url)                                           #保持获取到的网页源码
        soup = BeautifulSoup(html,"html.parser")                     #解析数据
        for item in soup.find_all('a',class_="box select"):          #查找符合要求的字符串,形成列表
            #print(item)                                             #测试查看item全部信息
            data = []                                                #保持信息
            item = str("box select")
            content = re.findall(findcontent,item)[0]                #re库用来通过正则表达式查找指定的字符串
            data.append(content)                                     #添加内容
            object = re.findall(findobject,item)[0]
            data.append(object)                                      #添加对象
            time = re.findall(findtime,item)[0]
            data.append(time)                                        #添加时间
            datalist.append(data)                                    #将处理好的信息放入datalist
    return  datalist

def askURL(url):                                                     #得到指定一个URL的网页内容
    head = {                                                         #模拟浏览器头部信息,向服务器发送信息
        "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 90.0.4430.212Safari / 537.36Edg / 90.0.818.66"
    }                                                                #用户代理,表示告诉服务器,我们是什么类型的机器、浏览器

    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e,code)
        if hasattr(e,"reason"):
            print(e.reason)
    #return html



def saveDate(datalist,savepath):                                              #保存数据
    print("save....")
    book = xlwt.Workbook(encoding="utf-8")
    sheet = book.add_sheet('笔试')
    col = ("投诉内容","投诉对象和投诉要求","投诉时间")
    for i in range(0,3):
        sheet.write(0,i,col[i])
    for i in range(0,1):
        print("最新投诉")
        data = datalist[i]
        for j in range(0,3):
            sheet.write(i+1,j,data[j])
    book.save('savepath')

if __name__ == "__main__":                                           #当程序执行时,调用函数
    main()


数据是动态从接口获取的,在网页中没有办法直接获取,除非用 selenium模块结合浏览器爬取动态数据


# -*- coding:utf-8 -*-
import pandas as pd
import requests
import time,json

def getData():
    ##接口中获取数据,payload是构建请求参数
    payload = {
        'ts':1644914421055,
        'rs': 'kr8fQeDhM9wgEqjH',
        'signature':'0395ffce354f241719a3ae960a7c16d50c858ca152e55050df0326c7965d7e59',
        'callback':'jQuery1112018541001809691093_1644914421017',
        'type':2,
        'page_size':10,
        'page':1,
        '_': int(time.time() * 1000),
    }
    headers = {
        "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 90.0.4430.212Safari / 537.36Edg / 90.0.818.66",
        "x-requested-with": "XMLHttpRequest",
        "referer": "https://tousu.sina.com.cn/"
    }
    data = requests.get('https://tousu.sina.com.cn/api/index/feed',params=payload,headers=headers)
    return data.content.decode('utf-8')


def dataDeal(data):
    ##数据分析处理,筛选出需要的数据
    result = []
    data = data.split('"lists":')[1].split(']')[0] + ']'
    data = json.loads(data)
    for item in data:
        result.append({
            '投诉内容': item.get('main').get('title'),
            '投诉对象': item.get('main').get('cotitle'),
            '投诉要求': item.get('main').get('appeal'),
            '投诉时间': time.strftime("%Y-%m-%d",   time.localtime(  int(item.get('main').get('timestamp')) )    )
        })
    return result

def main():
    data = getData()
    result = dataDeal(data)
    ##写入excle文件,需要提前安装 xlwt,xlrd,openpyxl,pandas 模块
    pd.DataFrame( result ).to_excel('test.xlsx',encoding='utf-8',sheet_name='content',index=False)


if __name__ == '__main__':
    main()

结果:

img

main方法中调用saveDate这个方法少了参数。

saveDate(datalist,savepath)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632