冲动小郭 发表于 2020-4-4 20:20:53

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: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里面也没有要打印对应的数据啊?

冲动小郭 发表于 2020-4-4 22:28:21

qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:



额,尴尬了,我忘记打印列表输出了。。。
我想请问一下,这个headers必须要写的吗?

冲动小郭 发表于 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(.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 23:38:15

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

不加headers的话,除非你用代理服务器,不然人家网址就知道你是一段代码,可能直接拒绝访问

qiuyouzhi 发表于 2020-4-5 08:33:32

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

通常是要加的,不然报418

会计的会怎么念 发表于 2020-4-5 10:53:44

没有打印而已。
建议学会写注释。

一个账号 发表于 2020-4-5 11:01:43

qiuyouzhi 发表于 2020-4-4 20:23
不应该加上headers吗?
就像这样:



你这什么态度啊

zltzlt 发表于 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
      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-5 16:39:20

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

哦哦哦,这样啊,主要我原来爬取最好大学网的排名没有加headers就可以,我还以为保密性不高的这种网页都可以不加的。
嗯嗯,感谢您了!我明白了。{:7_115:}

冲动小郭 发表于 2020-4-5 16:40:36

qiuyouzhi 发表于 2020-4-5 08:33
通常是要加的,不然报418

嗯!好的!感谢回复!

冲动小郭 发表于 2020-4-5 16:41:34

会计的会怎么念 发表于 2020-4-5 10:53
没有打印而已。
建议学会写注释。

嗯,今后会注意这些问题的!非常感谢您的指点!

冲动小郭 发表于 2020-4-5 17:09:20

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]
查看完整版本: python爬取大学排名运行显示process finished with exit code 0,但是没有结果