Sufficiency Economy
Group Blog
 
All blogs
 

Python: โหลดการ์ตูนจาก web

พอดีพบ web การ์ตูน onlineที่ //www.mangareader.net มีการ์ตูนเยอะดีเหมือนกัน แต่ต้องload ที่ละหน้า น่าเบื่อเหมือนกัน
ดังนั้นลอง click ขวา แล้วก็ properties ก็ได้ link url ประมาณนี้
//i35.mangareader.net/dragon-ball/1/dragon-ball-1695152.jpg

ซึ่ง python มี library load file จาก net อยู่ คือ urllib
import urllib
url = "//i14.mangareader.net/dragon-ball/1/dragon-ball-1695162.jpg"
urllib.urlretrieve(url,"test.png")
เพียงสามบรรทัดนี้ ก็ load รูปมาได้แล้ว ง่ายมากๆ

แล้วก็คิดว่า เลข ภาพจะ run ไปเรื่อยq แต่ช่าย เพราะค่า i35 จะเปลี่ยนไปเรื่อยๆแบบ random เลขก็ไม่ run ต่อ เช่นหน้าที่ 2 มี url
//i2.mangareader.net/dragon-ball/1/dragon-ball-1695153.jpg

ก็เลยหาต่อ พบว่าสิ่งที่ run เป็นลำดับก็คือไฟล์ html
หน้าที่ 1: //www.mangareader.net/105-2100-1/dragon-ball/chapter-1.html
หน้าที่ 2: //www.mangareader.net/105-2100-2/dragon-ball/chapter-1.html
หน้าที่ 3: //www.mangareader.net/105-2100-3/dragon-ball/chapter-1.html
ก็คือค่า 105-2100-1 2 3 ไปตามเลขหน้า

ต่อไปก็ดู code ใน html ว่าส่วนแสดงภาพอยู่ที่ไหน
โดย click ขวา view source ก็พบบรรทัดนี้

Dragon Ball 1 - Page 1


ไงข้างบนดันเป็นรูป link ไปส่ะได้





โดยมีคำว่า 800 เป็นจุดสังเกต โอ้สุดยอด
ดังนั้นจึงมีขั้นตอน load ภาพประมาณนี้คือ
1. load file html
2. หาบรรทัดที่มีเลข 800
3. เก็บค่าลงตัวแปร strRead
4. หา url ของ ภาพ โดยใช้คำสั่ง split กำหนดให้แยกคำด้วยเครื่องหมาย "
5. เก็บค่าในตัวแปร List
6. ดึงค่าใน List ลำดับที่ 11 มาซึ่่งก็คือ url ของรูป
7. แล้วก็ load ภาพมา save ในเครื่องก็เป็นอันเสร็จ
แล้วก็วน loop ไปเรื่อยๆ

อันนี้ source code ลองไปไล่ ดูเองล่ะกัน
อีกหน่อย
while num<=2: ไว้กำหนดจำนวนหน้าที่ต้องการ ในที่นี้คือ สองหน้า
url = "//www.mangareader.net/105-2100-"+str(num)+"/dragon-ball/chapter-1.html"อันนี้กำหนด url หน้าแรก




 

Create Date : 19 กรกฎาคม 2554    
Last Update : 19 กรกฎาคม 2554 19:20:27 น.
Counter : 1028 Pageviews.  

Python อ่านข้อมูล text File (Lexitron)

คราวนี้มาลองใช้ python อ่านข้อมูล text file ดู ไฟล์ที่ใช้ก็คือ ไฟล์ dict Lexitron จาก //lexitron.nectec.or.th/2009_1/
เมื่อ d/l มาแล้วจะมีไฟล์ชื่อ etlex ซึ่งจะเป็นมูลแบบ xml แต่เวลาอ่านไฟล์จะพบปัญหามี code 0xfc
อยู่ 7 จุด ซึ่งไม่รู้มาได้อย่างไร และจาก //www.ascii.ca/cp874.htm จะพบว่า
ascii code ที่ใช้งานจะมีตั้งแต่ 0x20-0xFB ดังนั้นจึงใช้โปรแกรม hex edit replace ให้เป็น 0x5F ?

การอ่านไฟล์ก็ง่ายมาก ตามนี้เลย
from Tkinter import *
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

root = Tk()
L1 = Label(root, text = 'Begin' + 'n')
L1.pack()

#เปิดไฟล์ แบบอ่านอย่างเดียว
f = open('etlex-test','r')

while 1:
#อ่านที่ละบรรทัด
line = f.readline().decode('TIS-620')
L1['text'] = L1['text']+ line + "n"
#ตรวจสอบว่า eof หรือไม่
if line == '' :
L1['text'] = L1['text']+'END OF FILE' + "n"
break
#ปิดไฟล์
f.close

root.mainloop()

=======================
คำสั่งนี้ f.readline().decode('TIS-620') ต้องใส่ decode ด้วยเนื่องจากไฟล์ที่เก็บข้อมูล
เป็นแบบ ascii ไม่งั้นจะอ่านไม่รู้เรื่อง

ผลลัพธ์ ก็จะประมาณนี้






 

Create Date : 13 มิถุนายน 2554    
Last Update : 13 มิถุนายน 2554 20:41:25 น.
Counter : 1889 Pageviews.  

Python อ่านโครงสร้างของ Table ของ MS Access




วันนี้เรามาดูวิธ๊หาชื่อตาราง และชื่อField ของฐานข้อมูล MS Access กันดีกว่า (ใครเดาได้หรือไม่ ว่าจะเอาไปทำอะไรต่อ?)
วิธ๊การก็ง่ายๆ โดยเรียกข้อมูล ผ่าน object "cursor"

1) strConn = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + E1.get()+'.mdb'
2) db = pyodbc.connect(strConn,autocommit=True)
3) cursor = db.cursor()


ต่อไปก็วนลูป ดึงชื่อตารางจากฐานข้อมูลที่เลือก แล้วเอาไป
เก็บในตัวแปรแบบ List ที่ชื่อว่า ListTable
for row in cursor.tables(tableType='TABLE'):
ListTable.append(row.table_name)

ต่อไปก็เลือกที่ละ Table มาหาชื่อ Field แล้วเก็บในตัวแปรแบบString ชื่อ L
for x in ListTable:
L = L + x + "n"
L = L + "Fields Detail" + "n"
for row in cursor.columns(table=x):
L = L + "t" +row.column_name + "n"

สุดท้ายก็จะได้ข้อมูลชื่อตาราง และชื่อField ในตัวแปร L

แล้วนำมาแสดง ใน Text widgets โดยนำ scrollbar widgets มาติดไว้ลองดูใน sourcecode ล่ะกัน ที่นี้เลย




 

Create Date : 01 มิถุนายน 2554    
Last Update : 1 มิถุนายน 2554 20:06:06 น.
Counter : 1018 Pageviews.  

Python ทำโปรแกรมจัดการฐานข้อมูล MS Access อย่างง่าย




จากครั้งก่อนโน้น ได้ทดลองติดต่อกับฐานข้อมูล Access กันแล้ว และครั้งที่แล้วได้ทำหน้าจอให้ดูสวยงาม โดยใช้ grid method ซึ่งถ้าเราความรู้ทั้งสองอย่างมารวมกันก็จะได้โปรแกรม จัดการฐานข้อมูล MS Access อย่างง่ายๆ กัน
โดยโปรแกรมจะมีคุณสมบัติ
1. สร้างฐานข้อมูล
2. สร้างตาราง
3. สร้างField ประเภทต่างๆ แต่เอาง่ายๆ ก็พวก Text Integer และ Decimal

แล้วทำอย่างไร กัน
เริ่ม สร้างฐานข้อมูล ก็เอาง่าย ก็ทำการ copy ไฟล์ BankDatabase แล้วเปลี่ยนชื่อตามที่ตั้งไว้
การ Copy File
import shutil
shutil.copy2('ชื่อไฟล์ต้นทาง', 'ชื่อไฟล์ปลายทาง')
เช่น ต้องการ copy file TmpDB.mdb ไปเป็นไฟล์ test.mdb ก็เขียนตามนี้
shutil.copy2('TmpDB.mdb', 'test.mdb')
ง่ายมากๆ

ต่อไปก็การสร้างตาราง และ Fields ก็เรียกใช้คำสั่ง SQL
CREATE TABLE ชื่อTable (ชื่อField datatype)

ถ้าต้องการเพิ่ม Field ก็เรียกใช้คำสั่ง SQL
ALTER TABLE ชื่อTable ADD COLUMN ชื่อField datatype
ประมาณนี้ แล้วสั่ง execute ส่ะ

แต่มีต้องเพิ่มเติมตอน connect กับ Database ต้องเพิ่ม autocommit=True ด้วยไม่งั้น มันไม่ error แต่ไม่สร้างTable ให้ งงเหมือนกัน
db = pyodbc.connect(strConn,autocommit=True)

เพิ่มเติมเรื่อง Widget
ค่าให้ม้น DISABLED หรือ ENABLE โดยการกำหนดค่า state ให้เป็น DISABLED และ NORMAL ตามลำดับ

การแสดง messagebox ก็ทำโดย
import tkMessageBox
tkMessageBox.showinfo("ข้อความที่ Title Bar", "ข้อความที่ต้องการแสดง" )

ที่เหลือก็ลองแกะๆ code เอาละก้น
source code อยู่นี้ครับ




 

Create Date : 06 พฤษภาคม 2554    
Last Update : 6 พฤษภาคม 2554 19:56:06 น.
Counter : 1596 Pageviews.  

Python การจัดการ widgets ด้วย grid method

จากที่ผ่านมา การจัดการวาง widgets บน form เราใช้ pack method ซึ่งค่อนข้างยุ่งยาก แต่มีอีกวิธีคือใช้ grid method
จากคำแนะนำที่ //effbot.org/tkinterbook/grid.htm ทำให้จัดการได้ง่ายขึ้น
หลักการของ grid คือ การวาง widgets ที่ต้องการบนตาราง โดยการระบุ row และ column (น่าแปลกที่ column ต้องเขียนเต็มๆ ไม่ได้ย่อว่า col)
และถ้าต้องการขยาย column หรือ row ก็กำหนดค่า columnspan หรือ rowspan เข้าไป สุดท้ายถ้าต้องการให้ชิดซ้าย ขวา บน ล่าง ก็ใช้ sticky กับค่าทิศทางแทน W E N S

เช่น
L1 = Label(root, text="กรอกชื่อฐานข้อมูล" )
L1.grid(row=0, column=0, sticky = W)
หมายถึง วาง Label ไว้ที่ แถวที่0 สดมภ์ที่ 0 และชิดทางซ้ายมือ

วาง Widgets ตามตำแหน่งที่ต้องการ ด้วยการระบุ row และ column





เพิ่ม sticky




เพิ่มการ columnspan



ตัวอย่าง source code งับ




 

Create Date : 02 พฤษภาคม 2554    
Last Update : 2 พฤษภาคม 2554 17:31:21 น.
Counter : 1339 Pageviews.  

1  2  3  4  5  6  

wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.