Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: lấy link và tiêu đề bằng regex

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    15

    Mặc định lấy link và tiêu đề bằng regex

    HTML Code:
    1.         <div id="topmenu">
    2.         <!--Menu Top-->
    3.         <div id="ctl00_ctl00_uc_header1_animatedMenu" class="basictab">
    4.             <ul>
    5.                 <li class="current"><a rel="sc0" href="/"><span>Trang nhất</span></a></li>                
    6.                         <li><a href="/2-0/xa-hoi/index.htm" rel="sc2">Xã hội</a></li>                    
    7.                         <li><a href="/1-0/kinh-te/index.htm" rel="sc1">Kinh tế</a></li>                  
    8.                         <li><a href="/311-0/quoc-te/index.htm" rel="sc311">Quốc tế</a></li>                    
    9.                         <li><a href="/538-0/giao-duc/index.htm" rel="sc538">Giáo dục</a></li>                    
    10.                         <li><a href="/7-0/phap-luat/index.htm" rel="sc7">Pháp luật</a></li>                    
    11.                         <li><a href="/13-0/van-hoa/index.htm" rel="sc13">Văn hóa</a></li>                    
    12.                         <li><a href="/thethao/" rel="sc200">Thể thao</a></li>                    
    13.                         <li><a href="/321-0/suc-khoe-gioi-tinh/index.htm" rel="sc321">Sức khỏe - Giới tính</a></li>                  
    14.                         <li><a href="/394-0/phong-su-kham-pha/index.htm" rel="sc394">Phóng sự - Khám phá</a></li>                    
    15.                         <li><a href="/thegioigame/" rel="sc397">Thế giới game</a></li>                  
    16.                         <li><a href="/congnghe/" rel="sc557">Công nghệ</a></li>
    17.                         <li><a href="/31-0/oto-xe-may/index.htm" rel="sc31">Ôtô - Xe máy</a></li>                  
    18.             </ul>
    19.         </div>



    xin cho minh hỏi muốn lấy tiều đề và link của tiêu đề của mấy cái link trên thì như thế nào.
    CHo mình hỏi luôn về cái regular expression có tool để lấy đúng k

  2. #2
    Ngày gia nhập
    06 2009
    Nơi ở
    Cái hộp
    Bài viết
    1,255

    Bạn nên học về regex rồi thử, trên mạng có rất nhiều tool đễ hỗ trợ học và kiểm tra.
    Men talk of killing time, while time quietly kills them.
    Time is what we want most, but what we use worst.
    ------------------------------
    YinYang's Programming Blog

  3. #3
    Ngày gia nhập
    07 2011
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi Yin Yang Xem bài viết
    Bạn nên học về regex rồi thử, trên mạng có rất nhiều tool đễ hỗ trợ học và kiểm tra.
    bạn có thể cho mình 1 cái tool nào sử dụng hay và tốt k?, cho mình 1 cái hướng dẫn luôn được k?

  4. #4
    Ngày gia nhập
    10 2010
    Bài viết
    518

    Pattern có luôn group này: "<a href=\"(?<link>.*?)\" rel=\".*?>(?<text>.*?)</a>"
    cày 1 chút regex là ngon.

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi Solewind.IT Xem bài viết
    Pattern có luôn group này: "<a href=\"(?<link>.*?)\" rel=\".*?>(?<text>.*?)</a>"
    cày 1 chút regex là ngon.
    cậu ơi thế cậu giúp mình cái bài bên box kia được k
    Lấy HTML trang VTC.vn như thế nào?

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    518

    Mặc định lấy link và tiêu đề bằng regex

    Hơi ngại down code về xem. bác cứ đưa html lên rồi m viết pattern cho. hay cụ thể là lấy cái gì từ vtc

  7. #7
    Ngày gia nhập
    07 2011
    Bài viết
    15

    mình muốn lấy link chuyên mục + tên chuyên mục
    link top new + tên top new
    link title + tên title
    của trang VTC đó
    giờ vứt cái HTML lên nó dài quá.
    nếu được bạn cho mình cái yahoo
    mình chat hỏi bạn cho dễ dàng
    cảm ơn bạn nhiều

    ban Solewind.IT chưa ghé qua đây ah.Giúp mình với đi bạn

  8. #8
    Ngày gia nhập
    10 2010
    Bài viết
    518

    Nói luôn bác cách tạo pattern cho dễ nhé:
    Mở web dùng Firefox đã cài đặt firebug.
    Kick chuột phải vào vị trí muốn lấy(ở đây là cái link tin tức đấy) chọn "Thăm dò phần tử" hay inspect element tùy theo dùng firefox bản TA hay tiếng việt.
    Nhìn theo cái cấu trúc cây hiện ra phía dưới, bác sẽ thấy cái link nó dc chọn sẵn nhé, nhìn lên phía trên cái link sẽ là các thẻ chứa nó, tìm cái thẻ chứa nó đầu tiên mà dc lặp lại nhiều lần(nói vậy chắc bác hiểu)-ở đây là thẻ <div class="cat_box_col">
    Kick chuột phải vào <div class="cat_box_col"> chọn copy html.
    Thu dc cái này:
    Code:
    <div class="cat_box_col">
                                    <a id="ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl03_hlImgPath" href="/10-294924/quoc-te/tin-tuc/tham-sat-o-nauy-khung-bo-jihad-co-that-la-tac-gia.htm">
                                        <img alt="Thảm sát ở Nauy: Khủng bố Jihad có thật là 'tác giả'?" class="img1 float" id="ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl03_imgPath" src="http://farm.vtc.vn/media/vtcnews/2011/07/23/anders-behring-breivik.jpg.137.101.cache"></a> <span style="margin-top: 0px;
                                            margin-bottom: 0px;"><a id="ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl03_hlTitle" href="/10-294924/quoc-te/tin-tuc/tham-sat-o-nauy-khung-bo-jihad-co-that-la-tac-gia.htm">Thảm sát ở Nauy: Khủng bố Jihad có thật là 'tác giả'?</a>
                                            (VTC News) - Những tình tiết mới khiến giới phân tích cho rằng, khả năng lời tuyên bố nhận trách nhiệm của nhóm khủng bố Jihad chỉ là... nhận xằng.
                                            <ul>
                                            
                                                    <li>
                                                        <a style="color: #5F5F5F;" id="ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl03_rptRelated_ctl00_hlRelatedTitle" href="/10-294841/quoc-te/tin-tuc/nauy-kinh-hoang-tron-chay-tay-sung-cuong-sat-tren-dao.htm">&gt; Nauy: Kinh hoàng trốn chạy tay súng cuồng sát trên đảo</a></li>
                                                
                                                    <li>
                                                        <a style="color: #5F5F5F;" id="ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl03_rptRelated_ctl01_hlRelatedTitle" href="/10-294813/quoc-te/tin-tuc/119-oslo-tang-thuong-hoang-loan-va-ngo-vuc.htm">&gt; '11/9 Oslo': Tang thương, hoảng loạn và ngờ vực</a></li>
                                                
                                            </ul>
                                        </span>
                                    <div style="clear: both">
                                    </div>
                                </div>
    Paste vào VS rồi bôi đen nó. nhấn Ctrl + H, chọn hộp look in là Selection, gõ vào Find what dấu " gõ vào Replace with \" => cái này là để thay dấu " bằng đấu \"
    làm tương tự để thay \n bằng rỗng(để từ nhiều dòng sẽ thành 1 dòng )-để thay dc \n thì cần phài tích vào checbox User regular expression nhé.
    Tiếp theo là thay :b+ bằng 1 dấu cách để loại các dấu cách thừa, thêm vào 2 đầu chuỗi 2 dấu " này vậy sẽ thu được:
    Code:
    string str="<div class=\"cat_box_col\"> <a id=\"ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl04_hlImgPath\" href=\"/10-294841/quoc-te/tin-tuc/nauy-kinh-hoang-tron-chay-tay-sung-cuong-sat-tren-dao.htm\"> <img alt=\"Nauy: Kinh hoàng trốn chạy tay súng cuồng sát trên đảo\" class=\"img1 float\" id=\"ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl04_imgPath\" src=\"http://farm.vtc.vn/media/vtcnews/2011/07/23/1.JPG.137.101.cache\"></a> <span style=\"margin-top: 0px; margin-bottom: 0px;\"><a id=\"ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl04_hlTitle\" href=\"/10-294841/quoc-te/tin-tuc/nauy-kinh-hoang-tron-chay-tay-sung-cuong-sat-tren-dao.htm\">Nauy: Kinh hoàng trốn chạy tay súng cuồng sát trên đảo</a> (VTC News) - \"Khoảng 50 thiếu niên nhảy ùm xuống nước và cố bơi vào bờ. Chúng khóc, gào thét, hoảng loạn. Tất cả đều chỉ khoảng 14 -19 tuổi.\" <ul> <li> <a style=\"color: #5F5F5F;\" id=\"ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl04_rptRelated_ctl00_hlRelatedTitle\" href=\"/10-294819/quoc-te/tin-tuc/cap-nhat-vu-khung-bo-kep-o-nauy-it-nhat-87-nguoi-chet.htm\">&gt; Cập nhật vụ khủng bố kép ở Nauy: Ít nhất 87 người chết</a></li> <li> <a style=\"color: #5F5F5F;\" id=\"ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_rptArticlesList_ctl04_rptRelated_ctl01_hlRelatedTitle\" href=\"/10-294813/quoc-te/tin-tuc/119-oslo-tang-thuong-hoang-loan-va-ngo-vuc.htm\">&gt; '11/9 Oslo': Tang thương, hoảng loạn và ngờ vực</a></li> </ul> </span> <div style=\"clear: both\"> </div> </div>";
    Vậy là có 1 biến string chuẩn rồi nhé.
    H đến món chính là tạo pattern:
    Bất cứ chỗ nào cần lấy giá trị thì thay bằng (?<ten_nhom>.*?)
    H cần xác định những ký tự để phân biệt trong chuỗi-những ký tự này thì giữ nguyên, những ký tự còn lại thì thay bằng .*?
    H xem cần giữ lại những gì:
    Đầu tiên là cái <div class="cat_box_col">:mỗi một link chứa trong 1 div có class như vậy nên hiển nhiên là cái này cần giữ lại
    Do cần lấy link(mà link xác định bằng href) nên giữ lại đoạn href=", vậy đoạn từ cuối chuỗi <div class="cat_box_col"> đến href=" là k cần nữa => thay bằng .*?
    vậy có đoạn đầu pattern sẽ là <div class=\"cat_box_col\">.*?href=\"(?<ten_nhom>.*?)\"
    Tiêu đề thì nằm ở thẻ <a> thứ 2 do vậy cần thẻ giữ lại thẻ <a> </a>để phân biện-những gì không cần thiết lại thay bằng .*? => những cái k cần thiết sẽ là toàn bộ ký tự từ sau <div class=\"cat_box_col\">.*?href=\"(?<ten_nhom>.*?)\" cho đến <a, tiếp theo là từ <a cho đến dấu >
    Tiêu đề thì nằm giữa <a></a> vậy ta lại thay nó bằng (?<ten_nhom>.*?)
    những gì sau </a> thì k cần thiết nữa nên xóa đi luôn
    cuối cùng thu dc pattern sẽ là:
    Code:
    string pattern = "<div class=\"cat_box_col\">.*?href=\"(?<link>.*?)\".*?<a.*?>(?<text>.*?)</a>";
    ở đây đã thay ten_nhom rồi.
    Cuối cùng là do dấu . không đại diện cho ký tự xuống dòng do vậy cần thêm tùy chọn RegexOptions.Singleline để c# coi dấu . thay cho \n luôn.
    Vậy code cuối sẽ là thế này:

    Code:
    string pattern = "<div class=\"cat_box_col\">.*?href=\"(?<link>.*?)\".*?<a.*?>(?<text>.*?)</a>";
                Regex reg = new Regex(pattern,RegexOptions.Singleline);
                string s = "";
                foreach (Match m in reg.Matches(richTextBox1.Text))
                {
                    s += m.Groups["link"].Value + "\t|\t" + m.Groups["text"].Value + "\n\n";
                }
                richTextBox2.Text = s;
    Dùng code này chạy với trang: http://vtc.vn/10-0/quoc-te/tin-tuc/index.htm
    Sẽ thu dc kết quả:
    Code:
    /10-294954/quoc-te/tin-tuc/tau-cao-toc-trung-quoc-trat-banh-lao-khoi-cau.htm	|	Tàu cao tốc Trung Quốc trật bánh, lao khỏi cầu
    
    /10-294950/quoc-te/tin-tuc/arf-chuyen-sang-giai-doan-ngoai-giao-phong-ngua.htm	|	ARF chuyển sang giai đoạn &quot;Ngoại giao phòng ngừa&quot;
    
    /10-294814/quoc-te/tin-tuc/cuu-quan-chuc-my-ho-hao-dao-chinh-lat-do-tt-hugo-chavez.htm	|	Cựu quan chức Mỹ hô hào đảo chính lật đổ TT Hugo Chavez
    
    /10-294924/quoc-te/tin-tuc/tham-sat-o-nauy-khung-bo-jihad-co-that-la-tac-gia.htm	|	Thảm sát ở Nauy: Khủng bố Jihad có thật là 'tác giả'?
    
    /10-294841/quoc-te/tin-tuc/nauy-kinh-hoang-tron-chay-tay-sung-cuong-sat-tren-dao.htm	|	Nauy: Kinh hoàng trốn chạy tay súng cuồng sát trên đảo
    
    /10-294819/quoc-te/tin-tuc/cap-nhat-vu-khung-bo-kep-o-nauy-it-nhat-87-nguoi-chet.htm	|	Cập nhật vụ khủng bố kép ở Nauy: Ít nhất 87 người chết
    
    /10-294947/quoc-te/tin-tuc/ptt-pham-gia-khiem-tiep-xuc-voi-ngoai-truong-nga-my.htm	|	PTT Phạm Gia Khiêm tiếp xúc với Ngoại trưởng Nga, Mỹ
    
    /10-294813/quoc-te/tin-tuc/119-oslo-tang-thuong-hoang-loan-va-ngo-vuc.htm	|	'11/9 Oslo': Tang thương, hoảng loạn và ngờ vực
    
    /10-294821/quoc-te/tin-tuc/ai-cap-ngay-thu-6-tahrir-dien-bien-thanh-no-sung.htm	|	Ai Cập: 'Ngày thứ 6 Tahrir' diễn biến thành nổ súng
    
    /10-294625/quoc-te/tin-tuc/al-qaeda-chuyen-sang-san-xuat-phim-hoat-hinh.htm	|	Al-Qaeda chuyển sang sản xuất... phim hoạt hình
    
    /10-294786/quoc-te/tin-tuc/phe-doi-lap-libya-am-sat-quan-chuc-chinh-quyen-gaddafi.htm	|	Phe đối lập Libya ám sát quan chức chính quyền Gaddafi.
    
    /10-294736/quoc-te/tin-tuc/nato-sot-vo-vi-bi-hack-tai-lieu-sieu-nhay-cam.htm	|	NATO &quot;sốt vó&quot; vì bị hack tài liệu siêu nhạy cảm
    
    /10-294681/quoc-te/tin-tuc/trieu-tien-iran-hop-tac-phat-trien-ten-lua-hat-nhan.htm	|	Triều Tiên - Iran hợp tác phát triển tên lửa hạt nhân?
    
    /10-294676/quoc-te/tin-tuc/strauss-kahn-bi-to-gian-diu-voi-me-cua-nan-nhan.htm	|	Strauss-Kahn bị tố gian díu với... mẹ của nạn nhân
    Nhét 2 cái richTextbox vào nhé, cái richTextbox1 thì chứa html, cái richTextBox2 sẽ chứa kết quả thu dc. tạo 1 cái button rồi nhét code vào click nhé.
    Code ngắn vật vã nhỉ ^^. Nếu làm quen rồi thì chắc mất vài phút thôi.
    Đã được chỉnh sửa lần cuối bởi Solewind.IT : 24-07-2011 lúc 05:47 PM.

  9. #9
    Ngày gia nhập
    05 2011
    Bài viết
    299

    Solewin.IT ơi, sao cái group <a href=\"(?<link>.*?)\" rel=\".*?>(?<text>.*?)</a> này của bạn mình chạy bên expresso và visual đều không cho ra kết quả?
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  10. #10
    Ngày gia nhập
    12 2011
    Bài viết
    49

    Trích dẫn Nguyên bản được gửi bởi rossoneri Xem bài viết
    Solewin.IT ơi, sao cái group <a href=\"(?<link>.*?)\" rel=\".*?>(?<text>.*?)</a> này của bạn mình chạy bên expresso và visual đều không cho ra kết quả?
    Mình thấy chạy ầm ầm.

Các đề tài tương tự

  1. lấy link chuyển tiếp khi click vào link trên trang web
    Gửi bởi King trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 12-10-2013, 10:53 AM
  2. Tổng hợp toàn bộ link windows, office...(1 link duy nhất)!
    Gửi bởi vokimtri trong diễn đàn Software (Phần mềm) | Ebooks
    Trả lời: 1
    Bài viết cuối: 01-11-2012, 02:11 PM
  3. Rút gọn link với Adfly ( Link Shorter )
    Gửi bởi mediaadsvn trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 25-08-2012, 09:47 AM
  4. Lấy trường Id trong CSDL đưa và link (vi dụ link giới thiệu bạn bè)
    Gửi bởi tranphu0ng trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 21-10-2011, 08:41 AM
  5. phân biệt link chuyên mục và link bài viết của website tin tức
    Gửi bởi Mr_BimBim trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 04-07-2011, 01:42 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn