Lấy đường link từ file txt với cấu trúc html

Liên hệ QC

NT24

Thành viên mới
Tham gia
15/12/20
Bài viết
12
Được thích
0
Chào anh chị em trong diễn đàn!
Tôi có một file txt như file đính kèm.Nội dung trong đó có chứa các đường link cần lấy nằm trong các thẻ của html.Các anh chị cho hỏi làm sao để dùng Vba lấy các đường link đó ra excel ?
Xin chân thành cảm ơn!
 

File đính kèm

  • sample.txt
    1.5 KB · Đọc: 19
Chào anh chị em trong diễn đàn!
Tôi có một file txt như file đính kèm.Nội dung trong đó có chứa các đường link cần lấy nằm trong các thẻ của html.Các anh chị cho hỏi làm sao để dùng Vba lấy các đường link đó ra excel ?
Xin chân thành cảm ơn!
Thử code này :
Mã:
Option Explicit
Sub NTKTNN()
Dim i As Long
Dim FileNum As Integer
Dim DataLine As String
FileNum = FreeFile()
Open "C:\Users\plan14\Downloads\sample.txt" For Input As #FileNum
While Not EOF(FileNum)
    Line Input #FileNum, DataLine
    If InStr(DataLine, "'https://") > 0 Then
        i = i + 1
        Cells(i, 1) = DataLine
    End If
Wend
Close #FileNum
End Sub
 
Upvote 0
Cảm ơn bạn đã trợ giúp.code chạy được và lấy được 10 link trong file.phía dưới 10 link đó còn có 7 link nằm trong các thẻ nữa.Bạn có thể giúp tôi viết code để lấy không?
 
Upvote 0
Cảm ơn bạn đã trợ giúp.code chạy được và lấy được 10 link trong file.phía dưới 10 link đó còn có 7 link nằm trong các thẻ nữa.Bạn có thể giúp tôi viết code để lấy không?
Đoạn code sau giúp thêm được khúc:
Mã:
Sub Test()
Dim s$, i&, t$, p1%, p2%
Open "C:\sample.txt" For Input As #1
i = 1
Do Until EOF(1)
    Line Input #1, s
    If s Like "*http*" Then
        p1 = InStr(s, "http")
        p2 = InStr(p1 + 8, s, "/")
        t = Mid(s, p1, p2 - p1)
        Sheet1.Range("A" & i) = t
        i = i + 1
    End If
Loop
Close #1
End Sub
 
Upvote 0
tôi đã thử code và điều chạy được .Cảm ơn hai bạn đã giúp đỡ.
Bài đã được tự động gộp:

Hai bạn cho tôi hỏi thêm trong code có phần EOF(FileNum) hai bạn có thể giải thích phần này có nghĩa là gì được không?
 
Lần chỉnh sửa cuối:
Upvote 0
EOF là viết tắt của "End Of File"
Dịch sang tiếng Việt: Chỗ kết thúc của tập tin.

1608189218844.png
 
Upvote 0
Chào anh chị em trong diễn đàn!
Tôi có một file txt như file đính kèm.Nội dung trong đó có chứa các đường link cần lấy nằm trong các thẻ của html.Các anh chị cho hỏi làm sao để dùng Vba lấy các đường link đó ra excel ?
Xin chân thành cảm ơn!
Tổng quát nhất theo tôi nên sử dụng Regular Expression,
Có thể tham khảo :
Mã:
Sub GetWebLink()
 Dim strSource As String, fso As New FileSystemObject, Result, item
 Dim oMatch As IMatchCollection2
        strSource = fso.OpenTextFile(Application.GetOpenFilename(), ForReading).ReadAll
        With New RegExp
            .Global = True
            .IgnoreCase = True
            .Pattern = "https?://(www\.)?[a-z0-9\-]{3,}(\.[a-z]{2,4}){1,2}"
            If .Test(strSource) Then
               Set oMatch = .Execute(strSource)
               For Each item In oMatch
                    Result = Result & item & vbCrLf
               Next
               MsgBox Result
            End If
        End With
End Sub
Lưu ý để sử dụng được code trên bạn phải tích chọn tham chiếu 2 đối tượng được hight light như ảnh bên dưới
1608190177158.png
 
Upvote 0
Cảm ơn bạn đã giải thích,phần
p2 = InStr(p1 + 8, s, "/")
này + 8 nghĩa là gì vậy bạn?
p1 là vị trí tìm được của "http", có 4 ký tự.
p1+8 là vị trí bắt đầu tìm của hàm InStr, do sau "http có dấu "/", ví dụ: "https://", chiều dài chuỗi này là 8, nên tôi cộng thêm để tìm vị trí dấu "/" sau chuỗi "https:// ..."
 
Upvote 0
Rất cảm ơn các bạn đã dành thời gian giúp đỡ
 
Upvote 0
Nếu là chuỗi html thì đường dẫn nó nằm trong cái tag a, attribute href chứ.
Bình thường thì chỉ cần parse Dom Document. Có thể dùng XML Object hay HTML Object đều được.
 
Upvote 0
Lưu ý để sử dụng được code trên bạn phải tích chọn tham chiếu 2 đối tượng được hight light như ảnh bên dưới
Sao không thêm vài dòng nữa khỏi phải tick reference bác, những người không biết về vba lại hỏi bác phải giải thích dài dòng hơn đấy :D
 
Upvote 0
Nếu là chuỗi html thì đường dẫn nó nằm trong cái tag a, attribute href chứ.
Bình thường thì chỉ cần parse Dom Document. Có thể dùng XML Object hay HTML Object đều được.
Bạn nói rõ cách làm được không?cảm ơn bạn
Bài đã được tự động gộp:

Sao không thêm vài dòng nữa khỏi phải tick reference bác, những người không biết về vba lại hỏi bác phải giải thích dài dòng hơn đấy :D
Đúng là tôi phải mò một lúc mới ra.Không biết nếu không cần phải tick chọn thì làm như thế nào bạn ?
 
Upvote 0
Không biết nếu không cần phải tick chọn thì làm như thế nào bạn ?
Thử code sau:
Mã:
Sub GetWebLink()
Dim i As Long, s As String
Open "C:\sample.txt" For Input As #1
Do Until EOF(1)
    Line Input #1, s
    If s Like "*http*" Then
        With CreateObject("VBScript.RegExp")
            .Global = True
            .IgnoreCase = True
            .Pattern = "https?://(www\.)?[a-z0-9\-]{3,}(\.[a-z]{2,4}){1,2}"
            If .Test(s) Then
                i = i + 1
                Sheet1.Range("A" & i) = .Execute(s)(0)
            End If
        End With
    End If
Loop
Close #1
End Sub
 
Upvote 0
code của các bạn điều chạy tốt,Nhưng cho tôi hỏi code của @hungpecc1 và @leonguyenz có dùng VBScript.RegExp với những đường link ở phía sau .com là .com/download hay gì đó thì nên sửa như thế nào? để lấy được hết đường link đó
Rất cảm ơn mọi người nhiệt tình hỗ trợ
 
Lần chỉnh sửa cuối:
Upvote 0
Không biết nếu không cần phải tick chọn thì làm như thế nào bạn
Nếu đúng chuẩn code bác ấy thì sửa thế này:
Mã:
Sub GetWebLink()
 Dim strSource As String, fso As Object, RegExp As Object, Result, item, oMatch
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set RegExp = CreateObject("VBScript.Regexp")
        strSource = fso.OpenTextFile(Application.GetOpenFilename(), 1).ReadAll
        With RegExp
            .Global = True
            .IgnoreCase = True
            .Pattern = "https?://(www\.)?[a-z0-9\-]{3,}(\.[a-z]{2,4}){1,2}"
            If .Test(strSource) Then
               Set oMatch = .Execute(strSource)
               For Each item In oMatch
                    Result = Result & item & vbCrLf
               Next
               MsgBox Result
            End If
        End With
End Sub
 
Upvote 0
Nếu đúng chuẩn code bác ấy thì sửa thế này:
Mã:
Sub GetWebLink()
Dim strSource As String, fso As Object, RegExp As Object, Result, item, oMatch
Set fso = CreateObject("Scripting.FileSystemObject")
Set RegExp = CreateObject("VBScript.Regexp")
        strSource = fso.OpenTextFile(Application.GetOpenFilename(), 1).ReadAll
        With RegExp
            .Global = True
            .IgnoreCase = True
            .Pattern = "https?://(www\.)?[a-z0-9\-]{3,}(\.[a-z]{2,4}){1,2}"
            If .Test(strSource) Then
               Set oMatch = .Execute(strSource)
               For Each item In oMatch
                    Result = Result & item & vbCrLf
               Next
               MsgBox Result
            End If
        End With
End Sub
Cảm ơn bạn nhiều,mọi người nhiệt tình quá
 
Upvote 0
code của các bạn điều chạy tốt,Nhưng cho tôi hỏi code của @hungpecc1 và @leonguyenz có dùng VBScript.RegExp với những đường link ở phía sau .com là .com/download hay gì đó thì nên sửa như thế nào? để lấy được hết đường link đó
Rất cảm ơn mọi người nhiệt tình hỗ trợ
Pattern này được sưu tầm, bạn thay vào code trên: "[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)"
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom