爬虫完整代码查找错误
这是我打的项目源代码,请哪位大神指出一下错误,三天了,爬不出来# 这份代码实现第三方库导入以及二维列表的定义
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import matplotlib
allUniv=[]
# 这是给定获取url参数页面的HTML代码的通用函数
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encodin
returnr.text
except:
print("产生异常")
# 这是提取页面数据的函数模块
def fillUnivList(soup):
data = soup.find_all('tr') #找到所有的tr标签,返回列表
for tr in data:
ltd = tr.find_all('tr') #找到所有的td标签,返回列表
if len(ltd) == 0:
continue
singleUniv = []
for td in ltd:
singleUniv.append(td.text) #提取td标签中的信息
allUniv.append(singleUniv) #allUniv存储全部数据
# 这是输出高校排名函数
def printUnivList(num):
print("{:^10}{:^35}{:^10}{:^10}{:^10}".format(\
"排名", "学校名称", "省市", "类型", "总分"))
for i in range(num):
u = allUniv
for j in range(5):
u = u.strip()
print("{:^10}{:^35}{:^10}{:^10}{:^10}").format(\
u, str(u, u, u, u))
# 这是统计湘苏两省前500高校数及可视化函数
def data_display(num):
schoolNum = {"湖南": 0, "江苏": 0};
for i in range(num):
if "湖南" in allUniv:
schoolNum["江苏"] = schoolNum["湖南"]+1
if "江苏" in allUniv:
schoolNum["江苏"] = schoolNum["江苏"]+1
print(schoolNum)
name_list = ['湖南', '江苏']
num_list = , schoolNum["江苏"]]
matplotlib.rcParams['fort.sans-serif']=['simHei']
plt.bar(range(len(num_list)),num_list,\
color=['r','g','b'],tick_label=name_list)
plt.show()
# 这是主函数
def main(num):
url = "https://www.shanghairanking.cn/rankings/bcur/2020"
html = getHTMLText(url)
soup = BeautifulSoup(html, "html.parser")
fillUnivList(soup)
printUnivList(num)
data_display(num)
main(500)
老师留的小作业—求解答 先把格式弄好吧,看起来就不舒服,大佬看一眼就不想看内容了,极度不舒适 这个格式说实话,我都没看下去。。。一般问问题,不得先说问题在哪么····报错提醒呢 你这代码粗略目测就几个错误了,
r.encoding=r.apparent_encodin
schoolNum = {"湖南": 0, "江苏": 0};
确定能运行的起来?
爬不到和不能运行是两码事。 本帖最后由 lgsp_Jim 于 2021-12-5 13:27 编辑
数据好像是直接返回全部的,下一页没看到再次请求服务器获取数据,懒得研究,就爬了第一页数据。你的代码不想看,也没贴错误,懒得想。所以我怎么简单怎么来了....
先不说爬虫,整体python的代码小错误较多,我按照你的逻辑先把程序跑通了,之前的程序跑不起来。另外说实话用xpath来筛选数据更方便一些,另外这个代码只能爬第一页,其他数据在payload.js里面,下面代码只是按照你的逻辑爬一页数据而已,楼主可以对照着看下
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import matplotlib
allUniv=[]
# 这是给定获取url参数页面的HTML代码的通用函数
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
print("产生异常")
# 这是提取页面数据的函数模块
def fillUnivList(soup):
data = soup.find_all('tr') #找到所有的tr标签,返回列表
for tr in data:
ltd = tr.find_all('td') #找到所有的td标签,返回列表
if len(ltd) == 0: #移除标题列
continue
singleUniv = []
for td in ltd:
if td.select('.name-cn'):
singleUniv.append(td.select('.name-cn').text.strip())
continue
singleUniv.append(td.text.strip()) #提取td标签中的信息
allUniv.append(singleUniv) #allUniv存储全部数据
# 这是输出高校排名函数
def printUnivList(num):
print("{0:10}\t{1:{5}<10}\t{2:{5}<10}\t{3:{5}<10}\t{4:{5}<10}".format(
"排名", "学校名称", "省市", "类型", "总分",chr(12288)))
for i in range(num):
try:
u = allUniv
except Exception:
break
for j in range(5):
u = u.strip()
print("{0:<10}\t{1:{5}<10}\t{2:{5}<10}\t{3:{5}<10}\t{4:{5}<10}".format(
u, u, u, u, u, chr(12288)))
# 这是统计湘苏两省前500高校数及可视化函数
def data_display(num):
schoolNum = {"湖南": 0, "江苏": 0}
for i in range(num):
try:
u = allUniv
if u == '湖南' or u == '江苏':
schoolNum] = schoolNum]+1
except:
break
print(schoolNum)
name_list = ['湖南', '江苏']
num_list = , schoolNum["江苏"]]
matplotlib.rcParams['font.sans-serif']=['simHei']
plt.bar(range(len(num_list)),num_list,
color=['r','g','b'],tick_label=name_list)
plt.show()
# 这是主函数
def main(num):
url = "https://www.shanghairanking.cn/rankings/bcur/2020"
html = getHTMLText(url)
soup = BeautifulSoup(html, "html.parser")
fillUnivList(soup)
printUnivList(num)
data_display(num)
main(500) lgsp_Jim 发表于 2021-12-5 13:25
数据好像是直接返回全部的,下一页没看到再次请求服务器获取数据,懒得研究,就爬了第一页数据。你的代码不 ...
谢谢!太谢谢了
页:
[1]