鱼C论坛

 找回密码
 立即注册
查看: 774|回复: 12

[已解决]python爬取大学排名运行显示process finished with exit code 0,但是没有结果

[复制链接]
发表于 2020-4-4 20:20:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
"""世界大学排名"""
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([td[0].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

我想知道为什么没有爬取到我想要的大学排名信息呢?是我的解析标签的问题吗?求助大神!
最佳答案
2020-4-5 13:27:56
是这样吧?
"""世界大学排名"""
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[i]
        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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-4 20:23:39 | 显示全部楼层
本帖最后由 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里面也没有要打印对应的数据啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 22:28:21 | 显示全部楼层
qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:

额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 22:36:02 | 显示全部楼层
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([td[0].string])
        else:
            return ""

def printMovieList(ulist,num):
    tplt="{:^10}\t"
    print(tplt.format("大学名称"))
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0]))

def main():
    uinfo=[]
    url='http://www.unjs.com/z/1646082.html'
    html=getHTMLText(url)
    fillMovieList(uinfo,html)
    printMovieList(uinfo,8)

main()
我按照您说的修改了,还有问题。。我是刚接触这个爬虫,您多指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-4 23:38:15 | 显示全部楼层
冲动小郭 发表于 2020-4-4 22:28
额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗?

不加headers的话,除非你用代理服务器,不然人家网址就知道你是一段代码,可能直接拒绝访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 08:33:32 | 显示全部楼层
冲动小郭 发表于 2020-4-4 22:28
额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗?

通常是要加的,不然报418
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 10:53:44 | 显示全部楼层
没有打印而已。
建议学会写注释。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 11:01:43 | 显示全部楼层
qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:

你这什么态度啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 13:27:56 | 显示全部楼层    本楼为最佳答案   
是这样吧?
"""世界大学排名"""
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[i]
        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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-5 16:39:20 | 显示全部楼层
十月故里 发表于 2020-4-4 23:38
不加headers的话,除非你用代理服务器,不然人家网址就知道你是一段代码,可能直接拒绝访问

哦哦哦,这样啊,主要我原来爬取最好大学网的排名没有加headers就可以,我还以为保密性不高的这种网页都可以不加的。
嗯嗯,感谢您了!我明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-5 16:40:36 | 显示全部楼层
qiuyouzhi 发表于 2020-4-5 08:33
通常是要加的,不然报418

嗯!好的!感谢回复!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-5 16:41:34 | 显示全部楼层
会计的会怎么念 发表于 2020-4-5 10:53
没有打印而已。
建议学会写注释。

嗯,今后会注意这些问题的!非常感谢您的指点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-5 17:09:20 | 显示全部楼层

是的!!您的可以正确爬取!
 
for div in soup.find('div', class_="content"):
        if isinstance(div, bs4.element.Tag):
            ulist.append(div.string)
我应该是这里的问题,我学习和查询了您的这一部分的代码,理解了以后我觉得对我以后写代码很有帮助,非常感谢您!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 23:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表