[Cần giúp đỡ] Code VBA lấy dữ liệu trên web theo ngày được chọn

Liên hệ QC

taphets

Thành viên mới
Tham gia
9/4/16
Bài viết
34
Được thích
0
Dear các anh chị,

Em đang cần code VBA để lấy data từ web:

Do web chỉ cho trích xuất dữ liệu theo từng ngày và không xuất được data excel nên muốn tổng hợp lại rất khó khăn:
1625112604311.png

Data trong 1 ngày sau khi "Tìm kiếm" sẽ gồm:
- Kế hoạch tàu đến cảng
- Kế hoạch tàu rời cảng
- Kế hoạch tàu di chuyển
(data trong cùng một trang)

Nhờ anh chị giúp em code VBA để lấy dữ liệu theo ngày "From...to..." vào các sheet excel tương ứng và thêm dữ liệu ngày vào ạ:
1625112792225.png

Đội ơn các anh chị nhiều lắm.
 

File đính kèm

  • Ke hoach tau.xlsx
    22.7 KB · Đọc: 21
Mình đã tìm rất nhiều diễn đàn để tự viết:
1. Open IE
2. Vào website
3. Vòng lặp:
- Nhập vào ô Ngày (ctl22_txtDate_dateInput)
- Bấm tìm kiếm
- Copy dữ liệu từ
ctl22_GridView_TauDen
ctl22_GridView_TauRoi
ctl22_GridView_TauDiChuyen
- Paste dữ liệu theo sheet tương ứng

Nhưng sau khi nhập dữ liệu vào ô Ngày và bấm Tìm kiếm thì IE luôn báo lỗi:
1625132494304.png


Sub Test()
Dim IE As Object

Dim startDateText As Object, endDateText As Object

Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.navigate "http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033"

While IE.readyState <> 4
DoEvents
Wend

Dim Inv As Object
Set Inv = IE.document.getElementById("ctl22_txtDate_dateInput")
Inv.Value = "28/06/2021"

End With
Set IE = Nothing
End Sub
 
Upvote 0
Mình đã tìm rất nhiều diễn đàn để tự viết:
1. Open IE
2. Vào website
3. Vòng lặp:
- Nhập vào ô Ngày (ctl22_txtDate_dateInput)
- Bấm tìm kiếm
- Copy dữ liệu từ
ctl22_GridView_TauDen
ctl22_GridView_TauRoi
ctl22_GridView_TauDiChuyen
- Paste dữ liệu theo sheet tương ứng

Nhưng sau khi nhập dữ liệu vào ô Ngày và bấm Tìm kiếm thì IE luôn báo lỗi:
View attachment 261662


Sub Test()
Dim IE As Object

Dim startDateText As Object, endDateText As Object

Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.navigate "http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033"

While IE.readyState <> 4
DoEvents
Wend

Dim Inv As Object
Set Inv = IE.document.getElementById("ctl22_txtDate_dateInput")
Inv.Value = "28/06/2021"

End With
Set IE = Nothing
End Sub
Cái này a nhờ anh chị nào viết bằng Python cho sẽ khá hay
Bài đã được tự động gộp:

Mình đã tìm rất nhiều diễn đàn để tự viết:
1. Open IE
2. Vào website
3. Vòng lặp:
- Nhập vào ô Ngày (ctl22_txtDate_dateInput)
- Bấm tìm kiếm
- Copy dữ liệu từ
ctl22_GridView_TauDen
ctl22_GridView_TauRoi
ctl22_GridView_TauDiChuyen
- Paste dữ liệu theo sheet tương ứng

Nhưng sau khi nhập dữ liệu vào ô Ngày và bấm Tìm kiếm thì IE luôn báo lỗi:
View attachment 261662


Sub Test()
Dim IE As Object

Dim startDateText As Object, endDateText As Object

Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.navigate "http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033"

While IE.readyState <> 4
DoEvents
Wend

Dim Inv As Object
Set Inv = IE.document.getElementById("ctl22_txtDate_dateInput")
Inv.Value = "28/06/2021"

End With
Set IE = Nothing
End Sub
Em thấy có bài này anh Excel gì đó anh ấy viết rất hay bằng Python https://www.giaiphapexcel.com/diendan/threads/cần-code-vba-lấy-dữ-liệu-từ-web.132338/page-2
 
Upvote 0
Hình như Cảng không cập nhật dữ liệu cho IE nữa nên bị lỗi.
 
Upvote 0
Cảm ơn bạn nhiều, file rất ổn ạ. Bạn có thể thay phần ngày nhập thành From...to... để tra cứu nhiều ngày được không :xmasbiggrin: :xmasbiggrin:
Tôi nghĩ thêm cái vòng lặp theo Ngày bạn dư sức làm mà. Cứ làm trước đí. Lần lượt thay tham số ngày vào biến formData rồi gửi lệnh lên web (Post).
 
Upvote 0
Tôi nghĩ thêm cái vòng lặp theo Ngày bạn dư sức làm mà. Cứ làm trước đí. Lần lượt thay tham số ngày vào biến formData rồi gửi lệnh lên web (Post).
Mình thử làm gặp lỗi này ạ:1625274198431.png

Với bạn cho mình hỏi câu lệnh này:
#formData = "KeHoachTau%5BThoiGianTao%5D=" & thoigian & "&yt0=Tra+c%E1%BB%A9u"
Phần "KeHoachTau%5BThoiGianTao%5D=" & thoigian & "&yt0=Tra+c%E1%BB%A9u" mình lấy từ đâu của web để mình hiểu cách lấy cho các trang web khác ạ
 

File đính kèm

  • Ke Hoach Tau - Copy.xlsb
    31.9 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Xài tạm file này, lấy dữ liệu từ trang khác tương tự. Trang bạn đưa chưa biết cách lấy dữ liệu. :)
Trang trên đã gửi lệnh đến server như sau:
Địa chỉ gửi http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033
Sau đó sẽ nhận được một lệnh là địa chỉ chuyển hướng đến trang kết quả

Các Arguments trong Post Data đa số nằm trong các tập tin javascript của trang

Annotation 2021-07-03 082732.jpg

Annotation 2021-07-03 082859.jpg
 
Upvote 0
Trang trên đã gửi lệnh đến server như sau:
Địa chỉ gửi http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033
Sau đó sẽ nhận được một lệnh là địa chỉ chuyển hướng đến trang kết quả

Các Arguments trong Post Data đa số nằm trong các tập tin javascript của trang

Tôi có thấy các tham số trong Form data của trang đó nhưng không biết cách thức để tạo ra các tham số đó để gửi. Như cái VIEWSTATE, nó dài sọc...Nói chung là chưa rành về web nên chưa biết cách xử lý cái trang này Hesanbi.

Screen Shot 2021-07-03 at 08.49.41.png
 
Upvote 0
Mình thử làm gặp lỗi này ạ:

Với bạn cho mình hỏi câu lệnh này:
#formData = "KeHoachTau%5BThoiGianTao%5D=" & thoigian & "&yt0=Tra+c%E1%BB%A9u"
Phần "KeHoachTau%5BThoiGianTao%5D=" & thoigian & "&yt0=Tra+c%E1%BB%A9u" mình lấy từ đâu của web để mình hiểu cách lấy cho các trang web khác ạ

- Đó là lỗi "Sai kiểu dữ liệu". Biến "thoigian" đang khai báo dạng String, bạn đưa vô For...Next với tham số dạng Date thì lỗi rồi.
- Về cái biến formData, nó có 2 tham số truyền vào là: KeHoachTau[ThoiGianTao]; yt0. Để biết tên tham số này bạn phải mở trang web --> click chuột phải --> chọn Inspect để xem source code của trang --> vô mục Network. Cái chuỗi formData phải Encocde UTF-8 để gửi lên web. vì chuỗi ngắn và không thay đổi nên tôi dùng chuỗi đã Encode dán vô luôn cho nhanh, khỏi dùng hàm Encode.
Hàm EncodeUTF-8 trên diễn đàn có đầy.

Một điểm hạn chế khi lấy dữ liệu qua trang này là nó chậm cập nhật dữ liệu ngày hiện tại, cụ thể ngày hôm nay 3/7/2021 nó chưa cập nhật.
Bạn chờ bạn nào khác hỗ trợ lấy được từ trang web chính sẽ tốt hơn. Tôi thì bó tay.
File sửa bên dưới.


inspect.png
 

File đính kèm

  • Ke Hoach Tau_v1.xlsb
    47.6 KB · Đọc: 32
Upvote 0
Dear các anh chị,

Em đang cần code VBA để lấy data từ web:

Do web chỉ cho trích xuất dữ liệu theo từng ngày và không xuất được data excel nên muốn tổng hợp lại rất khó khăn:
View attachment 261641

Data trong 1 ngày sau khi "Tìm kiếm" sẽ gồm:
- Kế hoạch tàu đến cảng
- Kế hoạch tàu rời cảng
- Kế hoạch tàu di chuyển
(data trong cùng một trang)

Nhờ anh chị giúp em code VBA để lấy dữ liệu theo ngày "From...to..." vào các sheet excel tương ứng và thêm dữ liệu ngày vào ạ:
View attachment 261642

Đội ơn các anh chị nhiều lắm.
Tôi lấy data của trang bạn @ongke0711 gửi thì thấy dữ liệu từ tháng 05 trở về trước không có, nên tôi code trên trang bạn gửi, khá lằng nhằng do web nó chặn request cùng lúc, nên phải đặt thời gian chờ cho các luồng, nên nếu lấy nhiều thì khá chậm nhưng vẫn nhanh hơn đơn luồng khoảng 30%, bạn nên lấy khoảng 30 ngày 1 lần, tôi code bằng Python, tôi gửi file exe, cần code tôi gửi lên.
 
Upvote 0
Tôi lấy data của trang bạn @ongke0711 gửi thì thấy dữ liệu từ tháng 05 trở về trước không có, nên tôi code trên trang bạn gửi, khá lằng nhằng do web nó chặn request cùng lúc, nên phải đặt thời gian chờ cho các luồng, nên nếu lấy nhiều thì khá chậm nhưng vẫn nhanh hơn đơn luồng khoảng 30%, bạn nên lấy khoảng 30 ngày 1 lần, tôi code bằng Python, tôi gửi file exe, cần code tôi gửi lên.
Bạn cho xin code Python để học hỏi nhé. Cảm ơn.
 
Upvote 0
Bạn cho xin code Python để học hỏi nhé. Cảm ơn.
Python:
import pandas as pd, numpy as np, time, os,datetime as dt
import json, base64, requests
import concurrent.futures as threads
from bs4 import BeautifulSoup
pd.set_option('display.float','{:,.0f}'.format)
def get_data(lst_date):
    lst_table=['ctl22_GridView_TauRoi','ctl22_GridView_TauDiChuyen','ctl22_GridView_TauDen'] ### ID của 3 bảng
    lst_index=[13,14,14] #### Số cột của 3 bảng
    User_Agent=r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0'
    Content_Type,Host=r'application/x-www-form-urlencoded',r'cangvuhanghaitphcm.gov.vn'
    lst=['__EVENTTARGET','__EVENTARGUMENT','__VIEWSTATE','__VIEWSTATEGENERATOR','__EVENTVALIDATION','ctl43$txtSearch','ctl22$txtDate','ctl22$txtDate$dateInput','ctl22_txtDate_dateInput_ClientState','ctl22_txtDate_calendar_SD','ctl22_txtDate_calendar_AD','ctl22_txtDate_ClientState','ctl22$btnSearch']
    url=r'http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033'
    session=requests.session() #### tạo session lưu cookie cho các lần request sau
    req=session.get(url)
    soup=BeautifulSoup(req.text,'html.parser')
    lst2=[]
    for type in lst:
        try:
            type=soup.find('input',{'id':type.replace('$','_')}).get('value') #### get các tham số của lst
        except:
            type=''
        lst2.append(type)
    date_current,date_current_2,date_current_3,date_min,date_max=lst_date[0],lst_date[1],lst_date[2],'1980-01-01','2099-12-31'
    lst2[6]=date_current
    lst2[7]=date_current_2
    lst2[8]='{'+f'"enabled":true,"emptyMessage":"","validationText":"{date_current}-00-00-00","valueAsString":"{date_current}-00-00-00","minDateStr":"{date_min}-00-00-00","maxDateStr":"{date_max}-00-00-00","lastSetTextBoxValue":"{date_current_2}"'+'}'
    lst2[9],lst2[11]=f'[[{date_current_3}]]',''
    # param=''.join([lst[i]+':'+lst2[i] for i in range(len(lst))])#### chuyển tham số sang type string
    dic={} #### chuyển tham số sang type dic (sẽ tự encode khi đưa request lên server)
    for i,key in enumerate(lst):
        dic[key]=lst2[i]
    req=session.post(url,data=dic, headers={'User-Agent':User_Agent,'Content-Type':Content_Type,'Host':Host}) #### gửi request với tham số thay đổi theo ngày với session ban đầu
    req.close()
    soup=BeautifulSoup(req.text,'html.parser')
    lst_df=[pd.DataFrame(),pd.DataFrame(),pd.DataFrame()]
    for i,type in enumerate(lst_table):
        table=soup.find('table',{'id':type})
        if table:
            b=table.findAll('td')
            lst_01=[]
            for c in b:
                lst_01.append(c.text)
            df=pd.DataFrame(np.array(lst_01).reshape(-1,lst_index[i]),columns=[header.text for header in table.findAll('th')]) #### chuyển dữ liệu thành list và convert thành table
            df['Date'],df['Type']=date_current,type.split('_')[2]
            lst_df[i]=lst_df[i].append(df)
    return lst_df
t=time.perf_counter()
lst_df=[]
f_date,t_date='2021-06-28','2021-07-03'
date_range=pd.date_range(f_date,t_date,freq='D')
date_range01=[dt.date.strftime(_date,'%Y-%m-%d') for _date in date_range] #### format date dạng 1
date_range02=[dt.date.strftime(_date,'%d/%m/%Y') for _date in date_range] #### format date dạng 2
date_range03=[dt.date.strftime(_date,'%Y,%m,%d') for _date in date_range] #### format date dạng 3
lst_range=list(zip(*[date_range01,date_range02,date_range03])) #### Transpose mảng 2 chiều
with threads.ThreadPoolExecutor() as executor: #### sử dụng đa luồng
    results=[]
    for _date in lst_range: #### Tạo các luồng request
        results.append(executor.submit(get_data,_date))
        time.sleep(0.02) #### Đặt thời gian chờ cho các luồng
    for result in threads.as_completed(results):
        lst_df.append(result.result()) #### Combine kết quả các luồng khi hoàn thành
lst_df=list(zip(*lst_df)) #### Transpose mảng 2 chiều
lst_df=[pd.concat(lst) for lst in lst_df] #### chuyển kết quả thành DataFrame (bảng)
writer = pd.ExcelWriter('Data_web.xlsx') #### Lưu kết quả vào excel
for i,df in enumerate(lst_df):
    df.to_excel(writer, 'Data_'+'%02i'%(i+1),index=0)
writer.save(),writer.close()
# os.system('Data_web.xlsx') #### Xuất excel
os.startfile('Data_web.xlsx') #### Xuất excel
time.perf_counter()-t
Đây bạn
 
Upvote 0
Python:
import pandas as pd, numpy as np, time, os,datetime as dt
import json, base64, requests
import concurrent.futures as threads
from bs4 import BeautifulSoup
pd.set_option('display.float','{:,.0f}'.format)
def get_data(lst_date):
    lst_table=['ctl22_GridView_TauRoi','ctl22_GridView_TauDiChuyen','ctl22_GridView_TauDen'] ### ID của 3 bảng
    lst_index=[13,14,14] #### Số cột của 3 bảng
    User_Agent=r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0'
    Content_Type,Host=r'application/x-www-form-urlencoded',r'cangvuhanghaitphcm.gov.vn'
    lst=['__EVENTTARGET','__EVENTARGUMENT','__VIEWSTATE','__VIEWSTATEGENERATOR','__EVENTVALIDATION','ctl43$txtSearch','ctl22$txtDate','ctl22$txtDate$dateInput','ctl22_txtDate_dateInput_ClientState','ctl22_txtDate_calendar_SD','ctl22_txtDate_calendar_AD','ctl22_txtDate_ClientState','ctl22$btnSearch']
    url=r'http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033'
    session=requests.session() #### tạo session lưu cookie cho các lần request sau
    req=session.get(url)
    soup=BeautifulSoup(req.text,'html.parser')
    lst2=[]
    for type in lst:
        try:
            type=soup.find('input',{'id':type.replace('$','_')}).get('value') #### get các tham số của lst
        except:
            type=''
        lst2.append(type)
    date_current,date_current_2,date_current_3,date_min,date_max=lst_date[0],lst_date[1],lst_date[2],'1980-01-01','2099-12-31'
    lst2[6]=date_current
    lst2[7]=date_current_2
    lst2[8]='{'+f'"enabled":true,"emptyMessage":"","validationText":"{date_current}-00-00-00","valueAsString":"{date_current}-00-00-00","minDateStr":"{date_min}-00-00-00","maxDateStr":"{date_max}-00-00-00","lastSetTextBoxValue":"{date_current_2}"'+'}'
    lst2[9],lst2[11]=f'[[{date_current_3}]]',''
    # param=''.join([lst[i]+':'+lst2[i] for i in range(len(lst))])#### chuyển tham số sang type string
    dic={} #### chuyển tham số sang type dic (sẽ tự encode khi đưa request lên server)
    for i,key in enumerate(lst):
        dic[key]=lst2[i]
    req=session.post(url,data=dic, headers={'User-Agent':User_Agent,'Content-Type':Content_Type,'Host':Host}) #### gửi request với tham số thay đổi theo ngày với session ban đầu
    req.close()
    soup=BeautifulSoup(req.text,'html.parser')
    lst_df=[pd.DataFrame(),pd.DataFrame(),pd.DataFrame()]
    for i,type in enumerate(lst_table):
        table=soup.find('table',{'id':type})
        if table:
            b=table.findAll('td')
            lst_01=[]
            for c in b:
                lst_01.append(c.text)
            df=pd.DataFrame(np.array(lst_01).reshape(-1,lst_index[i]),columns=[header.text for header in table.findAll('th')]) #### chuyển dữ liệu thành list và convert thành table
            df['Date'],df['Type']=date_current,type.split('_')[2]
            lst_df[i]=lst_df[i].append(df)
    return lst_df
t=time.perf_counter()
lst_df=[]
f_date,t_date='2021-06-28','2021-07-03'
date_range=pd.date_range(f_date,t_date,freq='D')
date_range01=[dt.date.strftime(_date,'%Y-%m-%d') for _date in date_range] #### format date dạng 1
date_range02=[dt.date.strftime(_date,'%d/%m/%Y') for _date in date_range] #### format date dạng 2
date_range03=[dt.date.strftime(_date,'%Y,%m,%d') for _date in date_range] #### format date dạng 3
lst_range=list(zip(*[date_range01,date_range02,date_range03])) #### Transpose mảng 2 chiều
with threads.ThreadPoolExecutor() as executor: #### sử dụng đa luồng
    results=[]
    for _date in lst_range: #### Tạo các luồng request
        results.append(executor.submit(get_data,_date))
        time.sleep(0.02) #### Đặt thời gian chờ cho các luồng
    for result in threads.as_completed(results):
        lst_df.append(result.result()) #### Combine kết quả các luồng khi hoàn thành
lst_df=list(zip(*lst_df)) #### Transpose mảng 2 chiều
lst_df=[pd.concat(lst) for lst in lst_df] #### chuyển kết quả thành DataFrame (bảng)
writer = pd.ExcelWriter('Data_web.xlsx') #### Lưu kết quả vào excel
for i,df in enumerate(lst_df):
    df.to_excel(writer, 'Data_'+'%02i'%(i+1),index=0)
writer.save(),writer.close()
# os.system('Data_web.xlsx') #### Xuất excel
os.startfile('Data_web.xlsx') #### Xuất excel
time.perf_counter()-t
Đây bạn
Mình chạy thấy báo lỗi thế này ạ:
1625542389001.png
Bài đã được tự động gộp:

Tôi lấy data của trang bạn @ongke0711 gửi thì thấy dữ liệu từ tháng 05 trở về trước không có, nên tôi code trên trang bạn gửi, khá lằng nhằng do web nó chặn request cùng lúc, nên phải đặt thời gian chờ cho các luồng, nên nếu lấy nhiều thì khá chậm nhưng vẫn nhanh hơn đơn luồng khoảng 30%, bạn nên lấy khoảng 30 ngày 1 lần, tôi code bằng Python, tôi gửi file exe, cần code tôi gửi lên.
Bạn cho mình quyền truy cập file nhé. Cảm ơn bạn
 
Lần chỉnh sửa cuối:
Upvote 0
Python:
import pandas as pd, numpy as np, time, os,datetime as dt
import json, base64, requests
import concurrent.futures as threads
from bs4 import BeautifulSoup
pd.set_option('display.float','{:,.0f}'.format)
def get_data(lst_date):
    lst_table=['ctl22_GridView_TauRoi','ctl22_GridView_TauDiChuyen','ctl22_GridView_TauDen'] ### ID của 3 bảng
    lst_index=[13,14,14] #### Số cột của 3 bảng
    User_Agent=r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0'
    Content_Type,Host=r'application/x-www-form-urlencoded',r'cangvuhanghaitphcm.gov.vn'
    lst=['__EVENTTARGET','__EVENTARGUMENT','__VIEWSTATE','__VIEWSTATEGENERATOR','__EVENTVALIDATION','ctl43$txtSearch','ctl22$txtDate','ctl22$txtDate$dateInput','ctl22_txtDate_dateInput_ClientState','ctl22_txtDate_calendar_SD','ctl22_txtDate_calendar_AD','ctl22_txtDate_ClientState','ctl22$btnSearch']
    url=r'http://cangvuhanghaitphcm.gov.vn/index.aspx?page=shipschedule&cat=2033'
    session=requests.session() #### tạo session lưu cookie cho các lần request sau
    req=session.get(url)
    soup=BeautifulSoup(req.text,'html.parser')
    lst2=[]
    for type in lst:
        try:
            type=soup.find('input',{'id':type.replace('$','_')}).get('value') #### get các tham số của lst
        except:
            type=''
        lst2.append(type)
    date_current,date_current_2,date_current_3,date_min,date_max=lst_date[0],lst_date[1],lst_date[2],'1980-01-01','2099-12-31'
    lst2[6]=date_current
    lst2[7]=date_current_2
    lst2[8]='{'+f'"enabled":true,"emptyMessage":"","validationText":"{date_current}-00-00-00","valueAsString":"{date_current}-00-00-00","minDateStr":"{date_min}-00-00-00","maxDateStr":"{date_max}-00-00-00","lastSetTextBoxValue":"{date_current_2}"'+'}'
    lst2[9],lst2[11]=f'[[{date_current_3}]]',''
    # param=''.join([lst[i]+':'+lst2[i] for i in range(len(lst))])#### chuyển tham số sang type string
    dic={} #### chuyển tham số sang type dic (sẽ tự encode khi đưa request lên server)
    for i,key in enumerate(lst):
        dic[key]=lst2[i]
    req=session.post(url,data=dic, headers={'User-Agent':User_Agent,'Content-Type':Content_Type,'Host':Host}) #### gửi request với tham số thay đổi theo ngày với session ban đầu
    req.close()
    soup=BeautifulSoup(req.text,'html.parser')
    lst_df=[pd.DataFrame(),pd.DataFrame(),pd.DataFrame()]
    for i,type in enumerate(lst_table):
        table=soup.find('table',{'id':type})
        if table:
            b=table.findAll('td')
            lst_01=[]
            for c in b:
                lst_01.append(c.text)
            df=pd.DataFrame(np.array(lst_01).reshape(-1,lst_index[i]),columns=[header.text for header in table.findAll('th')]) #### chuyển dữ liệu thành list và convert thành table
            df['Date'],df['Type']=date_current,type.split('_')[2]
            lst_df[i]=lst_df[i].append(df)
    return lst_df
t=time.perf_counter()
lst_df=[]
f_date,t_date='2021-06-28','2021-07-03'
date_range=pd.date_range(f_date,t_date,freq='D')
date_range01=[dt.date.strftime(_date,'%Y-%m-%d') for _date in date_range] #### format date dạng 1
date_range02=[dt.date.strftime(_date,'%d/%m/%Y') for _date in date_range] #### format date dạng 2
date_range03=[dt.date.strftime(_date,'%Y,%m,%d') for _date in date_range] #### format date dạng 3
lst_range=list(zip(*[date_range01,date_range02,date_range03])) #### Transpose mảng 2 chiều
with threads.ThreadPoolExecutor() as executor: #### sử dụng đa luồng
    results=[]
    for _date in lst_range: #### Tạo các luồng request
        results.append(executor.submit(get_data,_date))
        time.sleep(0.02) #### Đặt thời gian chờ cho các luồng
    for result in threads.as_completed(results):
        lst_df.append(result.result()) #### Combine kết quả các luồng khi hoàn thành
lst_df=list(zip(*lst_df)) #### Transpose mảng 2 chiều
lst_df=[pd.concat(lst) for lst in lst_df] #### chuyển kết quả thành DataFrame (bảng)
writer = pd.ExcelWriter('Data_web.xlsx') #### Lưu kết quả vào excel
for i,df in enumerate(lst_df):
    df.to_excel(writer, 'Data_'+'%02i'%(i+1),index=0)
writer.save(),writer.close()
# os.system('Data_web.xlsx') #### Xuất excel
os.startfile('Data_web.xlsx') #### Xuất excel
time.perf_counter()-t
Đây bạn
ANh rất giỏi Python ! Đã tham khảo một số code anh làm !!!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom