python爬取大学排名运行显示process finished with exit code 0,但是没有结果
"""世界大学排名"""import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return ""
def fillMovieList(ulist,html):
soup=BeautifulSoup(html,"html.parser")
for div in soup.find('body').children:
if isinstance(div,bs4.element.Tag):
td=('p')
ulist.append(.string])
else:
return ""
def printMovieList(ulist,num):
tplt="{:^10}\t"
print(tplt.format("大学名称"))
def main():
uinfo=[]
url='http://www.unjs.com/z/1646082.html'
html=getHTMLText(url)
fillMovieList(uinfo,html)
printMovieList(uinfo,10)
main()
运行显示:
大学名称
Process finished with exit code 0
我想知道为什么没有爬取到我想要的大学排名信息呢?是我的解析标签的问题吗?求助大神!
本帖最后由 qiuyouzhi 于 2020-4-4 20:26 编辑
不应该加上headers吗?
就像这样:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
r=requests.get(url,headers=headers,timeout=30)
还有,那个td = ('p')是什么鬼?不应该是td = div('p')吗?
而且,你在printMovieList里面也没有要打印对应的数据啊? qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:
额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗? qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:
"""世界大学排名"""
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
kv={'user-agent':'Mozilla/5.0'}
r=requests.get(url,headers=kv,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return ""
def fillMovieList(ulist,html):
soup=BeautifulSoup(html,"html.parser")
for div in soup.find('body').children:
if isinstance(div,bs4.element.Tag):
td=div('p')
ulist.append(.string])
else:
return ""
def printMovieList(ulist,num):
tplt="{:^10}\t"
print(tplt.format("大学名称"))
for i in range(num):
u=ulist
print(tplt.format(u))
def main():
uinfo=[]
url='http://www.unjs.com/z/1646082.html'
html=getHTMLText(url)
fillMovieList(uinfo,html)
printMovieList(uinfo,8)
main()
我按照您说的修改了,还有问题。。我是刚接触这个爬虫,您多指教 冲动小郭 发表于 2020-4-4 22:28
额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗?
不加headers的话,除非你用代理服务器,不然人家网址就知道你是一段代码,可能直接拒绝访问 冲动小郭 发表于 2020-4-4 22:28
额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗?
通常是要加的,不然报418 没有打印而已。
建议学会写注释。 qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:
你这什么态度啊 是这样吧?
"""世界大学排名"""
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout=30, headers={"User-Agent": "Mozilla/5.0"})
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except Exception:
return ""
def fillMovieList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for div in soup.find('div', class_="content"):
if isinstance(div, bs4.element.Tag):
ulist.append(div.string)
else:
return ""
def printMovieList(ulist, num):
tplt = "{:^10}\t"
print(tplt.format("大学名称"))
for i in range(num):
u = ulist
print(tplt.format(u))
def main():
uinfo = []
url = 'http://www.unjs.com/z/1646082.html'
html = getHTMLText(url)
fillMovieList(uinfo, html)
printMovieList(uinfo, 10)
main() 十月故里 发表于 2020-4-4 23:38
不加headers的话,除非你用代理服务器,不然人家网址就知道你是一段代码,可能直接拒绝访问
哦哦哦,这样啊,主要我原来爬取最好大学网的排名没有加headers就可以,我还以为保密性不高的这种网页都可以不加的。
嗯嗯,感谢您了!我明白了。{:7_115:} qiuyouzhi 发表于 2020-4-5 08:33
通常是要加的,不然报418
嗯!好的!感谢回复! 会计的会怎么念 发表于 2020-4-5 10:53
没有打印而已。
建议学会写注释。
嗯,今后会注意这些问题的!非常感谢您的指点! zltzlt 发表于 2020-4-5 13:27
是这样吧?
是的!!您的可以正确爬取!
for div in soup.find('div', class_="content"):
if isinstance(div, bs4.element.Tag):
ulist.append(div.string)
我应该是这里的问题,我学习和查询了您的这一部分的代码,理解了以后我觉得对我以后写代码很有帮助,非常感谢您!!
页:
[1]