shzaoht
shzaoht
采纳率100%
2020-03-18 20:01

网上找的python爬取百度百科的代码,加工了一下想自己将print文字转换到tkinterlabel上,但文字就是显示不出来,求大佬解答!

5
from tkinter import *
import re
import bs4
import urllib.request
from bs4 import BeautifulSoup
import urllib.parse
import sys

root = Tk()
root.title('百度百科爬虫')
root.geometry('600x300')

def  搜索():
        get1 = enter.get()
        get2 = get1.strip()

        while get2 != 'out':
            if get2 == 'out':
                exit(0)
            print("please wait...")
            try:
                url = 'https://baike.baidu.com/item/' + urllib.parse.quote(get2)
                html = urllib.request.urlopen(url)
                content = html.read().decode('utf-8')
                html.close()
                soup = BeautifulSoup(content, "html.parser")
                text = soup.find('div', class_="lemma-summary").children

                print("search result:")
                for x in text:

                    word = re.sub(re.compile(r"<(.+?)>"), '', str(x))
                    words = re.sub(re.compile(r"\[(.+?)\]"), '', word)
                    #这里print可以正常显示
                    print(words)
                    #下一步想将words用label转换到窗口上时无法显示
                    lab = Label(root, text=words, font=('微软雅黑', 10), width=400, height=50)
                    lab.place(relx=0.28, y=100, relheight=0.35, width=400)


                except AttributeError:
                    print("Failed!Please enter more in details!")
            return

#输入内容后爬取百度百科相关内容
enter = Entry(root, font=('微软雅黑', 20))
enter.place(relx=0.27, y=230, relheight=0.13, width=400)

button = Button(root, text='发送')
button.place(relx=0.8, y=230, relheight=0.13, width=100,command=搜索)

root.mainloop()
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • seakingx 陈年椰子 1年前

    把你的代码改了一遍。 基本能工作了。

    
    from tkinter import *
    import re
    import bs4
    import urllib.request
    from bs4 import BeautifulSoup
    import urllib.parse
    import sys
    
    
    
    
    
    
    #输入内容后爬取百度百科相关内容
    if __name__=="__main__":
        def bksearch():
            get1 = enter.get()
            get2 = get1.strip()
    
            # while get2 != 'out':
            if get2 == 'out':
                exit(0)
            print("please wait...")
            try:
                url = 'https://baike.baidu.com/item/' + urllib.parse.quote(get2)
                html = urllib.request.urlopen(url)
                content = html.read().decode('utf-8')
                html.close()
                soup = BeautifulSoup(content, "html.parser")
                text = soup.find('div', class_="lemma-summary").children
    
                print("search result:")
                for x in text:
                    word = re.sub(re.compile(r"<(.+?)>"), '', str(x))
                    words = re.sub(re.compile(r"\[(.+?)\]"), '', word)
    
                    if len(words) < 5:
                        continue
                    # 这里print可以正常显示
                    print(words)
                    # ret_show.delete(1.0,"end")
                    ret_show.insert("end", words.strip())
                    # 下一步想将words用label转换到窗口上时无法显示
                    # lab = Label(root, text=words, font=('微软雅黑', 10), width=400, height=50)
                    # lab.place(relx=0.28, y=100, relheight=0.35, width=400)
    
                ret_show.insert("end", "\n")
            except Exception as e:
                print("Failed!Please enter more in details!")
                print(repr(e))
        root = Tk()
        root.title('百度百科爬虫')
        root.geometry('600x300')
        enter = Entry(root, font=('微软雅黑', 20))
        enter.place(x=1, y=20, relheight=0.13, width=200)
    
        ret_show = Text(root, font=('微软雅黑', 10))
        ret_show.place(x=1, y=80, relheight=0.5, width=560)
    
        button = Button(root, text='发送',command=bksearch)
        button.place(x=210, y=20, relheight=0.13, width=100)
    
        root.mainloop()
    
    
    点赞 2 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 1年前

    看下是不是内容中有中文,而你的python没有设置编码

    # -*- coding: utf-8 -*-
    

    或者你的word有换行,没有显示完整。

    点赞 评论 复制链接分享