m0_67045927 2022-02-15 05:15 采纳率: 100%
浏览 567
已结题

写完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()


  • 写回答

3条回答 默认 最新

  • 7*24 工作者 2022-02-16 10:42
    关注

    数据是动态从接口获取的,在网页中没有办法直接获取,除非用 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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月15日

悬赏问题

  • ¥15 YOLOv5在进行trainpy训练后为什么会出现这种情况(语言-python)
  • ¥15 关于远程桌面的鼠标位置转换
  • ¥15 MATLAB和mosek的求解问题
  • ¥20 修改中兴光猫sn的时候提示失败
  • ¥15 java大作业爬取网页
  • ¥15 怎么获取欧易的btc永续合约和交割合约的5m级的历史数据用来回测套利策略?
  • ¥15 有没有办法利用libusb读取usb设备数据
  • ¥15 为什么openeluer里面按不了python3呢?
  • ¥15 关于#matlab#的问题:训练序列与输入层维度不一样
  • ¥15 关于Ubuntu20.04.3LTS遇到的问题:在安装完CUDA驱动后,电脑会进入卡死的情况,但可以通过键盘按键进入安全重启,但重启完又会进入该情况!