这个是运行后:
# -*- 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()
结果:
main方法中调用saveDate这个方法少了参数。
saveDate(datalist,savepath)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!