【问题标题】:GUI web scraper in Python and TkinterPython 和 Tkinter 中的 GUI 网络爬虫
【发布时间】:2018-03-17 22:11:00
【问题描述】:

编辑

好的,到目前为止,这是我的全部代码:

from selenium import webdriver
from bs4 import BeautifulSoup as bs
import requests
import time
import os
import Tkinter as tk




def get_page():
    global driver
    driver = webdriver.Chrome()
    driver.get(url)
    last_height = driver.execute_script('return 
                      document.body.scrollHeight')
    while True:
        driver.execute_script('window.scrollTo(0, 
        document.body.scrollHeight);')
        new_height = driver.execute_script('return 
        document.body.scrollHeight')
        if new_height == last_height:
            break
        else:
            last_height = new_height


#This function uses BeautifulSoup to parse through the page source and find images.
    def get_img():

        sp = bs(driver.page_source, 'html.parser')
        for image in sp.find_all('img'):
            images.append(image)


#Create folder which will contain downloaded images.
    def make_dir():
        if not os.path.exists('Downloaded images'):
            os.mkdir('Downloaded images')
        os.chdir('Downloaded images')


#Function which saves images.
    def save_img():

        x = 0

        for image in images:
            try:
                url = image['src']
                source = requests.get(url)
                with open('img-{}.jpg'.format(x), 'wb') as f:
                    f.write(requests.get(url).content)
                    x += 1
            except:
                print 'Error while saving image.'

root = tk.Tk()
root.title('Image Scraper 1.0')
tk.Label(root, text = 'Enter URL:').grid(row=0)
e1 = tk.Entry(root)
e1.grid(row=0, column=1)
e1.insert(driver.get(url))
button1 = tk.Button(root, text = 'SCRAPE', command =scrape_site).grid(row=3, column=1, sticky=tk.W, pady=4)
button1.pack()

root.mainloop()

我试图将整个 scrape_site 函数放在 tkinters 按钮 command= 中,我现在看到这很愚蠢,显然它不起作用。如您所见,我将整个 tkinter 代码复制到主刮板文件中。有什么想法吗?我将不胜感激任何意见:)


我最近发布了关于网络爬虫的问题,它下载了猫的图像。这一次我决定,我会再向前迈出一步。我想制作 GUI 网络刮板,它将从网站下载图像,用户将在 tkinter Entry 小部件中输入这些图像。这甚至可能吗?我还创建了两个 .py 文件:一个用于刮板脚本,第二个用于 gui。它可以以这种方式存储还是应该是一个文件? 这是打开和滚动页面(使用硒)的刮板代码,它工作正常。我唯一的问题是:如何将其放入 tkinter? :)

def get_page():
    global driver
    driver = webdriver.Chrome()
    driver.get(url)
    last_height = driver.execute_script('return document.body.scrollHeight')
    while True:
        driver.execute_script('window.scrollTo(0, 
               document.body.scrollHeight);')
        new_height = driver.execute_script('return 
               document.body.scrollHeight')
        if new_height == last_height:
            break
        else:
            last_height = new_height
get_page()

【问题讨论】:

  • 您尚未共享任何 tkinter 代码。至于如何“将其放入 tkinter”,您可以更改 get_page 函数以接受 url 作为参数。然后 tkinter 代码可以调用这个函数并从入口小部件传递 URL。

标签: python tkinter web-scraping


【解决方案1】:

正如我在评论中提到的,您应该修改 get_page 以将 url 作为参数。 下面的简单示例显示了这可能如何工作,但替换了 get_page 函数(我没有 selenium)。

try:
    import tkinter as tk
except:
    import Tkinter as tk

def get_page(url):
    print("Getting cats from {}".format(url))

class App(tk.Frame):
    def __init__(self,master=None,**kw):
        tk.Frame.__init__(self,master=master,**kw)
        self.txtURL = tk.StringVar()
        self.entryURL = tk.Entry(self,textvariable=self.txtURL)
        self.entryURL.grid(row=0,column=0)
        self.btnGet = tk.Button(self,text="Get Some Cats!",command=self.getCats)
        self.btnGet.grid(row=0,column=1)

    def getCats(self):
        get_page(self.txtURL.get())


if __name__ == '__main__':
    root = tk.Tk()
    App(root).grid()
    root.mainloop()

您可以将 URL 输入到 Entry 小部件中,按下按钮并将 URL 发送到函数。

如果您的 get_page 函数位于单独的文件中,只需使用 from my_other_file import get_page 导入它,其中包含 get_page 函数的 python 文件的名称

【讨论】:

  • scotty3785,请问最后一个 if name__=='__main': 是什么?我一生中第二次看到它,我想知道它是什么:P
  • 已经有一个answer for that
  • 我的回答能回答你的问题吗?如果是,则应将其标记为已回答。
  • 部分是的。谢谢。
  • 哪一部分仍未得到解答?如果可以的话,很高兴更新我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多