东拼西凑学Python,这是一个坑,这是多么丑  

有编辑反映某站的稿子做了防复制,所有内容考不出来。对于程序员是多么简单的一件事,对于异业人士算是不小的难题。

手痒痒了,花了1个小时踩了好多坑有了本文。不要笑代码,全拼凑起来的,所幸python零基础的我能看懂能写,莫名其妙的优越感^_^

1.windows和mac是两套生态体系,好多包例如剪切板

2.python2和3是天堑,跨不过去

3.第三方包打包不跨平台不跨版本不跨32和64,不要说32的可以在64下跑,卡卡卡

上代码

# -*- coding: UTF-8 -*-
# 大多数代码来源于网上的各个片段,不会侵权。为了新手友好保留了所有注释。并且我还加了很多,防止明天我自己看不懂了
import tkinter as tk # 安装python自带,桌面UI专用
import requests #如果运行这里都30c.org报错,那只能pip install 了
import subprocess #剪切板控制,mac专用,windows没有这个包
import pyperclip #剪切板控制,windows专用,MAC没有这个包
from tkinter import END # 单独把这个申明blog.30c.org是因为后面的往text控件插入内容会报错
from lxml import etree #用pyinstaller打包记得额外导入
# 以下3行适用于python2,3已经用不到了。作用是解决30c.org界面显示是乱码
# import sys
# reload(sys)
# sys.setdefaultencoding(‘utf8’)
# 顶层窗口的实例(Top Level),也称为根窗口
# #——————————窗口———————————–#
window = tk.Tk() # 创建最上层主窗口
window.title(“30c.org小工具”) # 窗口标题
window.geometry(“900×600”) # 窗口大小,中间是英文x,而不能是运算符*
# lable 组件是显示文字或图片,第一个参数是父窗口名称。
# text,参数显示内容,\n用来换行。每一行居中显示,靠左显示没研究,不需要,没那么高的要求。
# font字体,窗口太大,不设置字体,就会很小。
# place是依据主窗口的相对位置,,x就是x轴,下面所有的控件都需要这样定位
tk.Label(window, text=”使用说明:\n仅支持测试学习\n输入要处理的网址后点击获取”, font=(“宋体”, 14)).place(x=50, y=20)
tk.Label(window, text=”网址:”, font=(“宋体”, 20)).place(x=50, y=100)
labText = tk.StringVar()
labelShow = tk.Label(window, textvariable=labText, font=(“宋体”, 14), fg=’#FF0000′).place(x=50, y=300)
# Text组件用于显示和处理多行文本。我用来展示程序的运行状态,输出到这个组件里面
show_text = tk.Text()
show_text.place(x=320, y=150)
# 滚动条
scroll = tk.Scrollbar()
scroll.pack(side=tk.RIGHT, fill=tk.Y) # side是滚动条blog.30c.org放置的位置,上下左右。fill是将滚动条沿着y轴填充
show_text.pack(side=tk.RIGHT, fill=tk.Y) # 将文本框填充进窗口的左侧
scroll.config(command=show_text.yview) # 将文本框关联到滚动条上,滚动条滑动,文本框跟随滑动
show_text.config(yscrollcommand=scroll.set) # 将滚动条关联到文本框
# Entry输入框,输入的值必须要定义,这里定义成字符串类型
var_url = tk.StringVar()
var_title = tk.StringVar()
# Entry输入框,输入的值必须要定义
entry_url = tk.Entry(window, textvariable=var_url)
entry_url.place(x=50, y=150)
entry_title = tk.Entry(window, textvariable=var_title)
entry_title.place(x=50, y=350)
# 剪切板复制
def writePb(tempStr):
# 以下注释为mac平台
# p = subprocess.Popen([‘pbcopy’], stdin=subprocess.PIPE)
# p.stdin.write(tempStr.replace(‘
’, ‘\n’))
# p.stdin.close()
# p.communicate()
pyperclip.copy(tempStr.replace(‘
’, ‘\n’)) #windows So easy
# 按钮组件点击触发的函数,我把输入框的获取到30c.org的两个值输出到Text控件
# END就是插入到Text控件里面最后。
# .get就是获取目标的输入框的方法
def get_tar():
url = var_url.get()
if url == “”:
labText.set(“请输入网址”)
else:
res = requests.get(url)
tree = etree.HTML(res.content)
title = tree.xpath(‘//title/text()’)[0]
var_title.set(title.replace(‘ ‘, ”))
content = tree.xpath(‘//div[@class=”atlas_share_text”]’)[0]
content_str = etree.tostring(content, encoding=’utf-8′)
content_str = content_str.decode() #python3需要,2可以去掉
# 写的太挫了,就是不想改
show_text.delete(‘1.0’, ‘end’) # 清空原内容,难道没有直接清空的方法么。还不如java
show_text.insert(END, content_str.replace(‘
’, ‘\n’)) #奇怪的网站带了很多奇怪的空格
writePb(content_str)
labText.set(‘复制正文成功’)
# Button组件,按钮组件,主要是触发一些功能,command指向一个函数就只触发的功能函数
get_detail = tk.Button(window, text=’获取’, font=’20’, command=get_tar)
get_detail.place(x=170, y=100)
def getTitle():
writePb(var_title.get())
labText.set(‘复制标题成功’)
butTitle = tk.Button(window, text=”复制标题”, font=’20’, command=getTitle)
butTitle.place(x=50, y=250)
def getContent():
writePb(show_text.get(‘1.0’, ‘end’))
labText.set(‘复制正文成功’)
butContent = tk.Button(window, text=”复制正文”, font=’20’, command=getContent)
butContent.place(x=150, y=250)
# 启动主窗口循环
window.mainloop()
# ———————————窗口————————————–#
代码结束,打包如下

pyinstaller -F spiderxx.py –hidden-im30c.orgport tkinter,lxml   #MAC

pyinstaller -F –onefile spiderxx.py –hidden-imblog.30c.orgport tkinter,lxml,piperclip  #windows

收工,吃饭去

没事别转我的文章,某些不仅转了还删了所有标记的JR

欢迎大佬支持本博客的发展 -- Donate --

本文链接:东拼西凑学Python,这是一个坑,这是多么丑

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
  1. 没有评论

  1. 没有通告