一.簡單爬取頁面內容
所需要庫: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將遠程鏈接數據下載到本地
效果: