Python簡易 爬蟲+圖形化界面(2020/7/5已更新)


一.簡單爬取頁面內容

所需要庫:thinter,python3自帶

代碼:

from tkinter import *
import re
import requests

def input1():
     link = str(inp1.get())
     headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}
     r = requests.get(link, headers=headers)
     html = r.text
     post = re.findall('<span class="post-view-count">(.*?)</span>', html)
     txt.insert(END, post)  # 追加顯示運算結果
     inp1.delete(0, END)

root = Tk()
root.geometry('460x240')
root.title('爬取閱讀數界面')

lb1 = Label(root, text='請輸入需要爬取的網頁')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1 = Entry(root)
inp1.place(relx=0.1, rely=0.2, relwidth=0.8, relheight=0.1)

# 方法

btn1 = Button(root, text='開始爬取', command=input1)
btn1.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.2)

# 在窗體垂直自上而下位置60%處起,布局相對窗體高度40%高的文本框
txt = Text(root)
txt.place(rely=0.6, relheight=0.4)

root.mainloop()

相關參數,參考:https://www.jianshu.com/p/91844c5bca78

 

原理:爬取自己博客的閱讀數,給爬蟲一個交互界面,簡單的用tkinter做到接收輸入,按鈕調用,最后輸出的結果

實現結果因網頁結構而異

 

效果:

 

二.圖片的爬取

代碼:

from tkinter import *
from urllib.request import urlopen    #注意這里的寫法urllib不能直接寫為import urllib要加上它的對象request
from bs4 import BeautifulSoup
import re
import time
import urllib.request

def input1():
    url = str(inp1.get())
    html = urllib.request.urlopen(url).read().decode('utf-8')
    soup = BeautifulSoup(html, 'html.parser')
    # 是指定Beautiful的解析器為“html.parser”還有BeautifulSoup(markup,“lxml”)BeautifulSoup(markup, “lxml-xml”) BeautifulSoup(markup,“xml”)等等很多種
    # 用Beautiful Soup結合正則表達式來提取包含所有圖片鏈接(img標簽中,class=**,以.png結尾的鏈接)的語句
    # find()查找第一個匹配結果出現的地方,find_all()找到所有匹配結果出現的地方
    # re模塊中包含一個重要函數是compile(pattern [, flags]) ,該函數根據包含的正則表達式的字符串創建模式對象。可以實現更有效率的匹配。
    links = soup.find_all('img', "", src=re.compile('.*(.jpg|.png|.jpeg)$'))

    # 設置保存圖片的路徑,否則會保存到程序當前路徑
    path = r'C:/Users/ASUS/desktop/images/'  # 路徑前的r是保持字符串原始值的意思,就是說不對其中的符號進行轉義
    for link in links:  # 使用attrs 獲取標簽屬性
        # 保存鏈接並命名,time.time()返回當前時間戳防止命名沖突
        # urlretrieve()方法直接將遠程數據下載到本地
        # urlretrieve(url, filename=None, reporthook=None, data=None)
        urllib.request.urlretrieve(link.attrs['src'],path + '\%s.png' % time.time())  # 使用request.urlretrieve直接將所有遠程鏈接數據下載到本地
        txt.insert(END, '已爬取 '+link.attrs['src']+'\n')
        txt.update()
    txt.insert(END,'\n'+'\n')# 文本最后插入
    txt.insert(END, '保存成功!保存路徑:'+path)
    inp1.delete(0, END)

root = Tk()
root.geometry('460x240')
root.title('爬取圖片界面')

lb1 = Label(root, text='請輸入需要爬取的網頁')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1 = Entry(root)
inp1.place(relx=0.1, rely=0.2, relwidth=0.8, relheight=0.1)

# 方法

btn1 = Button(root, text='開始爬取', command=input1)
btn1.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.2)

txt = Text(root)
txt.place(relx=0.1, rely=0.5,relwidth=0.8, relheight=0.4)

root.mainloop()

追加txt.update(),實時更新輸出內容

 

原理:爬取頁面img元素內所有以jpg,png,jpeg結尾的圖片,暫時無法爬取gif圖片,通過request.urlretrieve將遠程鏈接數據下載到本地

 

效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM