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

  • Thread starter Thread starter NT24
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

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

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
Upvote 0
Bạn nói rõ cách làm được không?cảm ơn bạn
Nếu tôi hiểu link trong "Lấy đường link ..." là link thực sự thì chưa có code nào trong chủ đề này làm chuẩn 100%. Hoặc làm vừa thiếu vừa thừa, hoặc cho kết quả sai.

Với tôi thì link là cái mắt tôi nhìn thấy, tay tôi có thể đưa chuột tới nó, và khi click thì tôi sẽ được chuyển sang chỗ khác. Đấy mới là LINK. Vì thế những vd. 'https://www.332343546855.com:9900/' trong thẻ script đâu có là link? Có nhìn thấy, có thể click vào https://www.332343546855.com:9900/ không?

Giả sử sample.txt và tập tin Excel nằm cùng thư mục. Nếu khác thì sửa filename. Không phải chọn gì trong Tools cả.
Mã:
Sub Test()
Dim count As Long, filename As String, text As String
Dim htmlDocument As Object, fso As Object
Dim el As Object
    Set htmlDocument = CreateObject("HtmlFile")
    Set fso = CreateObject("Scripting.FileSystemObject")
    filename = ThisWorkbook.Path & "\sample.txt"
    htmlDocument.body.innerHTML = "<html><head>" & fso.OpenTextFile(filename).ReadAll
    
    For Each el In htmlDocument.getElementsByTagName("a")
        count = count + 1
        Sheet1.Range("A" & count).Value = el.href
    Next el
    Set htmlDocument = Nothing
    Set fso = Nothing
End Sub
 
Upvote 0
Nếu tôi hiểu link trong "Lấy đường link ..." là link thực sự thì chưa có code nào trong chủ đề này làm chuẩn 100%. Hoặc làm vừa thiếu vừa thừa, hoặc cho kết quả sai.

Với tôi thì link là cái mắt tôi nhìn thấy, tay tôi có thể đưa chuột tới nó, và khi click thì tôi sẽ được chuyển sang chỗ khác. Đấy mới là LINK. Vì thế những vd. 'https://www.332343546855.com:9900/' trong thẻ script đâu có là link? Có nhìn thấy, có thể click vào https://www.332343546855.com:9900/ không?

Giả sử sample.txt và tập tin Excel nằm cùng thư mục. Nếu khác thì sửa filename. Không phải chọn gì trong Tools cả.
Mã:
Sub Test()
Dim count As Long, filename As String, text As String
Dim htmlDocument As Object, fso As Object
Dim el As Object
    Set htmlDocument = CreateObject("HtmlFile")
    Set fso = CreateObject("Scripting.FileSystemObject")
    filename = ThisWorkbook.Path & "\sample.txt"
    htmlDocument.body.innerHTML = "<html><head>" & fso.OpenTextFile(filename).ReadAll
  
    For Each el In htmlDocument.getElementsByTagName("a")
        count = count + 1
        Sheet1.Range("A" & count).Value = el.href
    Next el
    Set htmlDocument = Nothing
    Set fso = Nothing
End Sub
Cảm ơn bạn đã quan tâm bài viết. Đúng như bạn nói là link khi nhấn vào sẽ được chuyển đến trang khác. Với đoạn script là đoạn code random để chạy ngẫu nhiên các link trong thẻ list danh sách kia. Và những đường link đó tôi cũng muốn lấy. Nghĩa là trong tập html của web đó có đường link là sẽ lấy đấy bạn. Nhìn cách viết code của bạn thì hình như có thể lấy trực tiếp khi có địa chỉ trang web đó chứ không nhất thiết là một file txt đúng không. Hiện tại tôi không ngồi máy tính. Ngày mai tôi sẽ thử code của bạn.? Chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn đã quan tâm bài viết. Đúng như bạn nói là link khi nhấn vào sẽ được chuyển đến trang khác. Với đoạn script là đoạn code random để chạy ngẫu nhiên các link trong thẻ list danh sách kia. Và những đường link đó tôi cũng muốn lấy. Nghĩa là trong tập html của web đó có đường link là sẽ lấy đấy bạn. Hiện tại tôi không ngồi máy tính. Ngày mai tôi sẽ thử code của bạn. Chân thành cảm ơn!
Khỏi phải thử. Code của tôi chỉ lấy link theo cách hiểu của tôi, không lấy những link theo mong muốn của bạn.
 
Upvote 0
Nếu tôi hiểu link trong "Lấy đường link ..." là link thực sự thì chưa có code nào trong chủ đề này làm chuẩn 100%. Hoặc làm vừa thiếu vừa thừa, hoặc cho kết quả sai.

Với tôi thì link là cái mắt tôi nhìn thấy, tay tôi có thể đưa chuột tới nó, và khi click thì tôi sẽ được chuyển sang chỗ khác. Đấy mới là LINK. Vì thế những vd. 'https://www.332343546855.com:9900/' trong thẻ script đâu có là link? Có nhìn thấy, có thể click vào https://www.332343546855.com:9900/ không?

Giả sử sample.txt và tập tin Excel nằm cùng thư mục. Nếu khác thì sửa filename. Không phải chọn gì trong Tools cả.
...
Ở bài #12 tôi đã có nói chỉ cần dùng đúng cái object để parse Dom Document là giản dị và chính xác.
Nhưng có lẽ bà con thấy cái code dùng Regex nên hứng chí thử vậy thôi.
 
Upvote 0
Ở bài #12 tôi đã có nói chỉ cần dùng đúng cái object để parse Dom Document là giản dị và chính xác.
Nhưng có lẽ bà con thấy cái code dùng Regex nên hứng chí thử vậy thôi.
Em thì quan tâm cái địa chỉ trang web để có được nội dung như bài #1. Nhưng lại sợ bị nhắc rì quét nhiều ảnh hưởng... nên không í ới gì. :)
 
Upvote 0
Nếu tôi hiểu link trong "Lấy đường link ..." là link thực sự thì chưa có code nào trong chủ đề này làm chuẩn 100%. Hoặc làm vừa thiếu vừa thừa, hoặc cho kết quả sai.

Với tôi thì link là cái mắt tôi nhìn thấy, tay tôi có thể đưa chuột tới nó, và khi click thì tôi sẽ được chuyển sang chỗ khác. Đấy mới là LINK. Vì thế những vd. 'https://www.332343546855.com:9900/' trong thẻ script đâu có là link? Có nhìn thấy, có thể click vào https://www.332343546855.com:9900/ không?

Giả sử sample.txt và tập tin Excel nằm cùng thư mục. Nếu khác thì sửa filename. Không phải chọn gì trong Tools cả.
Mã:
Sub Test()
Dim count As Long, filename As String, text As String
Dim htmlDocument As Object, fso As Object
Dim el As Object
    Set htmlDocument = CreateObject("HtmlFile")
    Set fso = CreateObject("Scripting.FileSystemObject")
    filename = ThisWorkbook.Path & "\sample.txt"
    htmlDocument.body.innerHTML = "<html><head>" & fso.OpenTextFile(filename).ReadAll
   
    For Each el In htmlDocument.getElementsByTagName("a")
        count = count + 1
        Sheet1.Range("A" & count).Value = el.href
    Next el
    Set htmlDocument = Nothing
    Set fso = Nothing
End Sub
Bạn cho hỏi thêm nếu thay file txt là một đường link,và như bạn nói là sẽ lấy những đường link có thể click được.thì code nên sửa như thế nào? cảm ơn bạn
 
Upvote 0
Bạn cho hỏi thêm nếu thay file txt là một đường link,và như bạn nói là sẽ lấy những đường link có thể click được.thì code nên sửa như thế nào? cảm ơn bạn
Tôi không dám nói trước điều gì nhưng đã nói thế thì phải đưa đường link lên. Đâu phải trang web nào cũng như nhau. Đến con gái mỗi người một vẻ, nhan sắc, tính cách, ngoại hình không như nhau. Với người con gái này cần phải tiếp cận từ mặt này, với người con gái khác lại phải từ mặt khác.
 
Upvote 0

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

Back
Top Bottom