Thứ Sáu, 19 tháng 4, 2019

Hướng dẫn thu thập dữ liệu trên web trong c #

Hướng dẫn thu 

thập dữ liệu trên web trong c #





https://medium.com/@thepen0411/web-crawling-tutorial-in-c-48d921ef956a


https://github.com/abdulationef/webcrawling






Hướng dẫn thu thập dữ liệu trên web trong c #

trong hướng dẫn này tôi sẽ chỉ cho bạn cách thực hiện thu thập dữ liệu web bằng c # và một số tập hợp .Net như
  1. HtmlAgilityPack
  2. Mạng
tôi đang viết hướng dẫn này sau khi xem video hướng dẫn từ @ Houssem Dellai . trong hướng dẫn tiếp theo của tôi, tôi sẽ sử dụng python để loại bỏ web

Thu thập dữ liệu trên web là gì?

Thu thập dữ liệu là quá trình nhờ các công cụ tìm kiếm thu thập thông tin về các trang web trên web trên toàn thế giới. Nó cũng có thể được sử dụng để tự động hóa các tác vụ bảo trì trên một trang Web, chẳng hạn như kiểm tra các liên kết hoặc xác nhận mã HTML
Bò về cơ bản có nghĩa là đi theo một con đường. đây là lý do tại sao nhiều nhà phát triển trang web cung cấp bản đồ trang web để dễ dàng điều hướng và thu thập dữ liệu trên trang web của họ.
Làm thế nào các công cụ tìm kiếm có thể đề xuất một vài trang trong số hàng nghìn tỷ tồn tại? Câu trả lời là thu thập dữ liệu trên web

Trình thu thập dữ liệu trên web là gì?

Trình thu thập dữ liệu web còn được gọi là trình thu thập dữ liệu web hoặc webrobot là một chương trình hoặc tập lệnh tự động duyệt thế giới Wide Web theo phương pháp tự động, có phương pháp. Quá trình này được gọi là thu thập dữ liệu Web hoặc Spidering. Nhiều trang web hợp pháp, đặc biệt là các công cụ tìm kiếm, sử dụng Spidering như một phương tiện cung cấp dữ liệu cập nhật cho các phân tích.
Trình thu thập dữ liệu web là chương trình máy tính quét web, 'đọc' mọi thứ họ tìm thấy. Trình thu thập dữ liệu web còn được gọi là nhện, bot và bộ chỉ mục tự động. Các trình thu thập thông tin này quét các trang web để xem những từ nào chúng chứa và những từ đó được sử dụng. Trình thu thập thông tin biến những phát hiện của nó thành một chỉ số khổng lồ
Mục đích của thu thập dữ liệu web thường dành cho mục đích Lập chỉ mục Web ( spidering web ).

Lập chỉ mục web

Lập chỉ mục web đề cập đến các phương pháp khác nhau để lập chỉ mục nội dung của một trang web hoặc toàn bộ Internet. Chỉ mục về cơ bản là một danh sách lớn các từ và các trang web có tính năng của chúng. Trình thu thập dữ liệu web quét web thường xuyên để chúng luôn có một chỉ mục cập nhật của web. Vì vậy, khi bạn hỏi một công cụ tìm kiếm các trang về hà mã, công cụ tìm kiếm sẽ kiểm tra chỉ mục của nó và cung cấp cho bạn một danh sách các trang có đề cập đến hà mã.
Khi Google truy cập trang web của bạn cho mục đích theo dõi. Quá trình này được thực hiện bởi trình thu thập thông tin Spider của Google và sau khi thu thập thông tin xong, kết quả sẽ được đưa vào chỉ mục của Google (tức là tìm kiếm trên web)

Một số công cụ thu thập dữ liệu trên web cho các nền tảng khác nhau

  1. Nạng
  2. Phế liệu
  3. LỚN
  4. Ccrawler
  5. Opese
  6. Googlebot
  7. Arachnode.net
  8. Người lái
  9. Arale
  10. WebLech
sau tất cả phần giới thiệu về việc thu thập thông tin trên web, bây giờ chúng ta hãy đi vào mã hóa thực tế bằng cách sử dụng c # và visual studio 2013 theo các bước sau. Hãy nhớ rằng trong hướng dẫn này, chúng tôi sẽ nhận được các mẫu xe, liên kết, url hình ảnh và giá cả nhưng sau khi nắm vững quy trình này, bạn có thể nhận được bất kỳ thông tin nào trên bất kỳ trang web nào miễn là chúng có sẵn trên trang web nhưng nếu bạn có bất kỳ thách thức nào bạn có thể tiếp cận tôi để chúng ta có thể nhìn vào cùng nhau.
  1. Khởi động studio hình ảnh của bạn

Màn hình chính
2. Tạo dự án mới
nhấp vào dự án mới để tạo dự án mới, chọn Ứng dụng bảng điều khiển và đặt tên là CrawlerDemo sau đó nhấn ok

3. sau khi tạo dự án, hãy thêm các tham chiếu HtmlAgilityPack và Net.Http vào dự án bằng cách nhấp chuột phải vào tên dự án trong trình khám phá giải pháp và sau đó chọn Manage Nuget Gói sau đó nhập HtmlAgilityPack vào hộp tìm kiếm sau đó nhấp vào cài đặt. Lặp lại quy trình tương tự cho Net.Http
Lưu ý: vui lòng đảm bảo rằng bạn đã kết nối với internet và cũng là nhà thám hiểm Giải pháp của bạn sẽ không có lớp Xe hơi, chúng tôi sẽ tạo ra điều đó sau, đây chỉ là cách bạn khám phá Giải pháp sẽ như thế nào ở cuối hướng dẫn, vì vậy hãy kiên nhẫn


4. sau khi thêm các tham chiếu đến dự án của chúng tôi, chúng ta hãy nhập chúng vào dự án bằng cách thêm
  1. sử dụng HtmlAgilityPack;
  2. sử dụng System.Net.Http;
Vì vậy, dự án của chúng tôi nên giống với hình ảnh dưới đây

hãy để chúng tôi tạo một phương thức async và đặt tên là startCrawlerasync ()

tiếp theo, chúng tôi tạo một biến cho url trang web và cũng là một phiên bản của httpClient để giữ url trang web và cũng là một htmldocument để có quyền truy cập vào các phần tử và thẻ html khác nhau trên trang web

hãy nhớ rằng trang web chúng tôi muốn thực hiện thu thập thông tin trên web là

Nếu bạn nhấp chuột phải vào trang để kiểm tra trang sẽ có chế độ xem tương tự như hình ảnh bên dưới

tiếp theo, chúng tôi sẽ khai báo một biến gọi là div để lưu trữ phần tử div vì tất cả các phần tử và thẻ khác mang thông tin phương tiện cho hướng dẫn được nhúng bên trong phần tử div với tên lớp là article articleewew_car article_last_modele

tiếp theo chúng ta hãy tạo một lớp gọi là Xe với các thuộc tính sau;
Mô hình
Giá bán
Liên kết
URL hình ảnh
Nếu bạn không biết cách tạo một lớp, chỉ cần vào dự án trong trình khám phá giải pháp và sau đó chọn thêm lớp chọn sau đó đặt tên cho nó Xe rồi nhấn add

Sau khi thêm lớp Xe, nhấp vào nó để mở nếu nó không mở để mã hóa, sau đó thêm các thuộc tính trên vào nó. nên trông giống như thế này

sau đó điều hướng trở lại chương trình chính để tiếp tục, chúng ta sẽ cần thêm câu lệnh foreach để lặp lại các giá trị và phần tử trong biến div

lưu ý rằng Mô hình của xe nằm trong phần tử h2, giá nằm trong phần tử div, liên kết đến xe nằm trong thẻ neo và Imageurl nằm trong thẻ img.
tiếp theo, chúng tôi sẽ tạo một danh sách và chuyển lớp Xe thành loại để chứa tất cả thông tin được thu thập.

Tiếp theo, chúng tôi sẽ tạm dừng dự án tại điểm được hiển thị bên dưới, sau đó nhấp vào chạy sau đó di chuột vào biến ô tô và sau đó thu gọn nó để xem các mô hình và giá khác nhau. thông tin khác cũng có sẵn bên trong biến Cars nhưng vì chúng tôi đã cấu hình debuggerDisplay để hiển thị mô hình và giá cả cạnh nhau

hãy để chúng tôi tạm dừng và chạy mã

Tiếng hoan hô! làm thế nào mã làm việc như dự định
Chúc mừng mã hóa !!!
tôi muốn nâng cao mã bằng cách thêm thông tin vào cơ sở dữ liệu để lưu trữ chúng trong trường hợp cần cho mục đích tương lai
  1. đầu tiên chúng ta hãy tạo cấu trúc cơ sở dữ liệu của chúng tôi như dưới đây

2. sau đó thêm dòng mã sau vào dự án như hình dưới đây

sau khi chạy ứng dụng và nhấn phím enter để thoát khỏi ứng dụng, cơ sở dữ liệu của bạn sẽ được cập nhật như hình dưới đây

Cảm ơn bạn đã dành thời gian để đọc bài viết này,
Tôi hy vọng nó là hữu ích?
tôi <mã hóa />
bạn có thể tải xuống mã đầy đủ từ tài khoản git của tôi











Thứ Năm, 18 tháng 4, 2019

Expresso 3.1 Công cụ phát triển biểu thức chính quy hàng đầu

SimpleWebBrowser

SimpleWebBrowser
https://mshare.io/file/kWbr2Oa




































































































































HtmlAgilityPack Example-Extract Href


Dễ dàng trích xuất các liên kết từ một đoạn html với HtmlAgilityPack


https://onedrive.live.com/?id=15F731B049C8A797%21442&cid=15F731B049C8A797




HtmlAgilityPack Example-Extract Href


https://articles.runtings.co.uk/2009/11/easily-extracting-links-from-snippet-of.html

https://articles.runtings.co.uk/2009/11/easily-extracting-links-from-snippet-of.html

https://onedrive.live.com/?id=15F731B049C8A797%21442&cid=15F731B049C8A797




Dễ dàng trích xuất các liên kết từ một đoạn html với HtmlAgilityPack

HtmlAgilityPack là một thư viện mạnh mẽ giúp cho việc quét màn hình trong asp.net trở nên dễ dàng. Đây là phần thứ hai trong loạt bài tiếp tục mà tôi trình bày một cách để bạn trích xuất tất cả các liên kết từ một đoạn html.

Một chút nền tảng

Nếu bạn chưa nghe về HtmlAgilityPack thì bạn đã vào nhầm bài. Đi qua phần giới thiệu của tôi về chủ đề và sau đó quay lại và gặp tôi khi bạn đã đọc nó.

Ứng dụng mẫu sẽ hoạt động như thế nào

Ứng dụng mẫu sẽ lấy một đoạn html lộn xộn được lưu trữ trong một tệp văn bản. Chúng tôi sẽ tải nó vào và phân tích tất cả các thẻ <a href=""> và trình bày các liên kết này trong trình duyệt bằng cách ràng buộc chúng với chế độ xem lưới.
Hãy xem đoạn trích html mà chúng tôi sẽ tải:
~ / App_Data / HtmlSnippet.txt
<table Border = "0" cellpadding = "2" cellspaces = "7" style = "vertical-align: top;"> <tr> <td width = "80" align = "centre" valign = "top"> < font style = "font-size: 85%; font-family: arial, sans-serif"> <a href = "http://news.google.com/news/url?fd=R&sa=T&url = http% 3,3% 2 %% /XrArEKXhTe6dLM/6.jpg "alt =" "Border =" 1 "width =" 80 "height =" 80 "/> <br /> <font size =" - 2 "> Times Online </ font> </ a > </ font> </ td> <td valign = "top"> <font style = "font-size: 85%; font-family:arial, sans-serif "> <br /> <div style =" padding-top: 0.8em; "> <img alt =" "height =" 1 "width =" 1 "/> </ div> <div> <a href = "http://news.google.com/news/url?fd=R&sa=T&url=http%3A%2F%2Fwww.latimes.com%2Fnews%2Fnationworld%2Fnation%2Fla-na -health-coop20-2009aug20% 2C0% 2C4258832.story & amp; usg = AFQjCNG4LI_9w3yHg7H8ZqUBaKNwzpgiuA "> <b> Các hợp tác chăm sóc sức khỏe đang nổi lên như là thay thếcom% 2Fnews% 2Fnationworld% 2Fnation% 2Fla-na-Health-coop20-2009aug20% 2C0% 2C4258832.story & amp; usg = AFQjCNG4LI_9w3yHg7H8Zqa - bắn tỉa ->com% 2Fnews% 2Fnationworld% 2Fnation% 2Fla-na-Health-coop20-2009aug20% 2C0% 2C4258832.story & amp; usg = AFQjCNG4LI_9w3yHg7H8Zqa - bắn tỉa ->
Vâng, đó không phải là tất cả nhưng tôi nghĩ rằng bạn có được điểm. Giống như tôi đã nói đoạn trích này ban đầu đến từ một câu hỏi diễn đàn. Bản thân html đến từ những gì trông giống như một nguồn cấp tin tức của Google. Tôi đã giữ nó cho bài viết này vì nó cho thấy HtmlAgilityPack có thể xử lý mã lộn xộn và nó cũng sẽ không bị vấp bởi các url bổ sung được mã hóa url.
Cách tiếp cận thông thường của việc sử dụng biểu thức chính quy để trích xuất loại thông tin này có thể bị lừa bởi loại mã này. Tôi không phải là một fan hâm mộ lớn của việc sử dụng các biểu thức thông thường để trích xuất loại thông tin này vì chúng quá dễ vỡ (nhưng tôi là một fan hâm mộ lớn của các biểu thức thông thường).

Cấu trúc chính của chương trình

Đây là mã cho phương thức Page_Load cho sự nhìn chăm chú của bạn. Nó sẽ cung cấp cho bạn ý tưởng về các bước chính mà chương trình này thực hiện để hoàn thành các nhiệm vụ của mình:
được bảo vệ void Page_Load (người gửi đối tượng, EventArss e)
{
    // tải đoạn trích
    HtmlDocument htmlSnippet = new HtmlDocument ();
    htmlSnippet = LoadHtmlSnippetFromFile ();

    // trích xuất
    Danh sách <chuỗi> hrefTags = Danh sách mới <chuỗi> ();
    hrefTags = Extract ALLAHrefTags (htmlSnippet);

    // liên kết với Gridview
    GridViewHrefs.DataSource = hrefTags;
    GridViewHrefs.DataBind ();
}
Vì vậy, như bạn có thể thấy, cần ba bước chính - tải đoạn mã html vào hệ thống, phân tích cú pháp và giai đoạn mỹ phẩm cuối cùng để liên kết nó với GridView.
Trong dòng đầu tiên bạn thấy rằng chúng ta tạo một thể hiện của lớp HtmlDocument. Đây là một lớp đi kèm với thư viện HtmlAgilityPack. Đây là lớp chính mà bạn sử dụng để lưu trữ một HtmlDocument hoàn chỉnh.
Điều này mang lại cho chúng ta độc đáo với LoadHtmlSnippetFromFile ();

Đang tải đoạn mã html từ tệp

Phương thức thứ hai chúng ta sẽ xem xét là LoadHtmlSnippetFromFile ();
Đây là một phương pháp khá đơn giản, tải trong phiên bản đầy đủ của đoạn mã html lộn xộn khủng khiếp mà tôi đã trình bày trước đó. Tuy nhiên, điều này không có nghĩa là nó không mang tính giáo dục. Hãy xem:
/// <tóm tắt>
/// Tải đoạn mã html từ tệp txt
/// </ Tóm tắt>
riêng tư HtmlDocument LoadHtmlSnippetFromFile ()
{
    Trình đọc TextReader = File.OpenText (Server.MapPath ("~ / App_Data / HtmlSnippet.txt"));

    HtmlDocument doc = new HtmlDocument ();
    doc.Load (người đọc);

    người đọc. Đóng ();

    trả lại tài liệu;
}
Vì vậy, như bạn có thể thấy, tôi đã sử dụng một trong nhiều lớp trình đọc luồng để dễ dàng tải tệp txt đoạn trích html vào bộ nhớ.
Biến luồng văn bản html này thành một tài liệu có thể truy vấn là nhiệm vụ của phương thức Load () trên HtmlDocument. Nếu bạn chọc ngoáy với intellisense trên phương thức đó, bạn sẽ thấy rằng nó có 10 lần quá tải sẽ cho phép chúng tôi đường dẫn, luồng hoặc TextReaders với các tùy chọn mã hóa khác nhau.
Nếu bạn đã có nội dung của tài liệu html chứa trong chuỗi (chẳng hạn như từ dịch vụ web) thì bạn có thể sử dụng LoadHtml ().
Có một tùy chọn thứ ba mà HtmlAgilityPack hỗ trợ và đó là truy xuất trang qua internet thông qua một url. Điều này được thể hiện trong bài viết tiếp theo giải thích cách bạn có thể kiểm tra xem một trang web có chứa nguồn cấp dữ liệu rss hoặc nguyên tử hay không, nhưng bây giờ nó sẽ vẫn là một bí ẩn trêu ngươi.
Tôi không cần phải nói điều đó nhưng đừng quên. Đóng () luồng của bạn sau khi bạn đã điền vào HtmlDocument.

Trích xuất tất cả các thẻ href từ tài liệu

Đây là phần mà tất cả chúng ta đã chờ đợi - đó là phần mà phép thuật phân tích cú pháp html được thực hiện. Và mặc dù đây là một phương pháp đơn giản, nhưng nó thực sự cho thấy nhiều khối xây dựng chính mà bạn sẽ sử dụng trong các nỗ lực cạo màn hình của mình.
/// <tóm tắt>
/// Trích xuất tất cả các thẻ neo bằng HtmlAgilityPack
/// </ Tóm tắt>
/// <param name = "htmlSnippet"> </ param>
/// <trả về> </ trả về>
Danh sách riêng <chuỗi> Extract ALLAHrefTags (HtmlDocument htmlSnippet)
{
    Danh sách <chuỗi> hrefTags = Danh sách mới <chuỗi> ();

    foreach (liên kết HtmlNode trong htmlSnippet.DocumentNode.SelectNodes ("// a [@href]"))
    {
        HtmlAttribution att = link.Attribution ["href"];
        hrefTags.Add (att.Value);
    }

    return hrefTags;
}
Nhìn vào mã một số điều trở nên rõ ràng:
  • Lớp HtmlDocument chứa một tập hợp các HtmlNodes
  • Các HtmlNodes này có thể được chọn bằng truy vấn XPath
  • HtmlNodes sau đó có thể được hỏi thuộc tính theo thuộc tính với lớp HtmlAttribution.
Sử dụng ba yếu tố này, tôi đã trích xuất một danh sách tất cả các href trong đoạn mã html.
Việc sử dụng XPath để trích xuất thông tin ra khỏi các tài liệu html là chìa khóa cho sức mạnh của HtmlAgilityPack. Nếu bạn không biết XPath là gì thì đó là một công nghệ đi cùng với xml và cung cấp ngôn ngữ truy vấn để trích xuất các nút xml ra khỏi các tài liệu xml.
Các tài liệu XML phải hợp lệ để được truy vấn và hầu hết các html trên web đều không hợp lệ. Nó được rải rác với các thẻ không rõ ràng, viết hoa và lỗi cú pháp. Việc triển khai XPath bình thường không thể được sử dụng để truy vấn html trừ khi bạn dọn sạch nó trước. Điều tuyệt vời về điều này trong HtmlAgilityPack là việc triển khai sẽ cố gắng hết sức để trích xuất thông tin bất kể tính hợp lệ của tài liệu.
Điều này cho chúng ta một cách rất biểu cảm để mô tả thông tin mà chúng ta muốn trích xuất. Trong thực tế đối với nhiều dự án, bạn sẽ thấy rằng phần khó nhất là tìm ra truy vấn XPath chính xác để mô tả chính xác những gì bạn muốn.
Truy vấn của chúng tôi // a [@href] có nghĩa là chọn tất cả các thẻ (thẻ neo html) có thuộc tính href (vì vậy đừng chọn neo nếu nó chỉ là một neo có tên).
Bộ sưu tập kết quả sau đó được lặp lại trong vòng lặp foreach nơi tôi đọc thuộc tính href từ mỗi thẻ và đưa nó vào bộ sưu tập cuối cùng của tôi để ghi dữ liệu.
Chúng tôi đã đề cập đến rất nhiều nền tảng trong rất ít mã mà tôi hy vọng sẽ gây ấn tượng hơn nữa với bạn về sức mạnh của thư viện này.
Điều chỉnh trong thời gian tới để tìm hiểu làm thế nào chúng tôi sẽ xây dựng một công cụ truy vấn có thể phát hiện nếu một trang web có nguồn cấp dữ liệu rss hoặc nguyên tử được liên kết với nó!

Tải ứng dụng mẫu

Ứng dụng mẫu chứa mọi thứ chúng ta đã thảo luận trong bài viết này, bao gồm HtmlAgilityPack, mã và tệp đoạn trích html.

Thêm trong loạt bài này

Bài viết này là một phần của một loạt. Bạn có thể tìm thấy nhiều bài viết trong loạt bài này ở đây:










Ứng dụng sử dụng Quartz.net , một thư viện lập lịch công việc toàn diện để cho phép chúng tôi lên kế hoạch khi một số phần nhất định của quy trình nhập được chạy. Mục tiêu ở đây là để nó chạy như đồng hồ, sử dụng Prowl.net , prowldotnet và email tự động để gửi một số số liệu về sự thành công của việc nhập và khi cần chú ý (nếu có).

https://www.codeproject.com/Articles/598074/idea

Quartz.net