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

HtmlAgilityPack để Otparit trang

Đăng Bởi: Admin - tháng 4 25, 2019 - 0 Bình Luận

http://www.cyberforum.ru/csharp-beginners/thread1522563.html


HtmlAgilityPack để Otparit trang

31.08.2015, 15:02. Xem 1832. Câu trả lời 7
Nhãn chỉ Định một nhãn (tất Cả các nhãn)

http://market.karelia.pro/section/8/ - đây là những gì các bạn cần để otparit, cụ thể là quảng thời gian, tên và một liên kết đến quảng cáo.

Tôi đã cố gắng mà không làm việc. Nhiều hơn và @dữ liệu-id='282602 mỗi quảng cáo khác nhau

C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  công hiệu ParseAdverts(chuỗi AvitoAdverts)
        {
 HtmlAgilityPack.HtmlDocument PostsParser = mới HtmlAgilityPack.HtmlDocument();
 PostsParser.LoadHtml(AvitoAdverts);
 HtmlAgilityPack.HtmlNodeCollection AllNode =
 PostsParser.DocumentNode.SelectNodes("//ul[@lớp= "mới"]");
            nếu (AllNode != )
            {
                cho riêng mình (HtmlNode nút trong AllNode) // Tìm kiếm thông số và tạo ra những danh sách quảng cáo
                {
                    chuỗi tiêu đề = nút.SelectSingleNode("./li[[B]@dữ liệu-id='282602[/B]'] chìa khoá[@lớp='ngày'").Chuyên đề);     
                }
            }
        }
Đính kèm cấu trúc của các trang.
Thu nhỏ
HtmlAgilityPack để Otparit trang  
Scrypto đang ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
0
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
26 / 26 / 27
Đăng ký: 25.07.2013
Bài viết: 138
31.08.2015, 16:08 HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 2 (liên kết thường trực)
C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
công hiệu ParseAdverts(chuỗi AvitoAdverts)
        {
 HtmlAgilityPack.HtmlDocument PostsParser = mới HtmlAgilityPack.HtmlDocument();
 PostsParser.LoadHtml(AvitoAdverts);
            var AllNode = PostsParser.DocumentNode.SelectNodes("//*[@id='alist']//li");//có được tất cả quảng cáo trên trang
            nếu (AllNode != )
            {
                cho riêng mình (var nút trong AllNode) // đưa một trong quảng cáo
                {
                    chuỗi tiêu đề = nút.SelectSingleNode("//*[@lớp='ngày']").Chuyên đề;//ngày Tuyên bố
                }
            }
        }
quakeer ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
1
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
68 / 69 / 26
Đăng ký: 08.02.2013
Bài viết: 415
Hoàn thành kiểm tra: 1
01.09.2015, 20:44 [Lực lượng đặc nhiệm] HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 3 (liên kết thường trực)
quakeer,
cố gắng để làm như vậy
C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 công hiệu ParseAdverts(chuỗi AvitoAdverts)
        {
 HtmlAgilityPack.HtmlDocument PostsParser = mới HtmlAgilityPack.HtmlDocument();
 PostsParser.LoadHtml(AvitoAdverts);
            var AllNode = PostsParser.DocumentNode.SelectNodes("//ul[@id='alist']/li");//có được tất cả quảng cáo trên trang
            nếu (AllNode != )
            {
                cho riêng mình (var nút trong AllNode) // đưa một trong quảng cáo
                {
 Giờ ngày = DateNormaliser(nút.SelectSingleNode("//hạng[@lớp='ngày']").Chuyên đề);//có được ngày
                    chuỗi liên kết = nút.SelectSingleNode("//hạng[@lớp='tên']/a").Tính["a"].Giá trị;
                    chuỗi tên = nút.SelectSingleNode("//hạng[@lớp='tên']//khoảng[@lớp='đề']").Chuyên đề;
                    chuỗi giá = nút.SelectSingleNode("//hạng[@lớp='giá']//nhịp").Chuyên đề;
 AdvertList.Thêm(mới quảng Cáo(tên giá, link, ngày));
                }
                Hệ thống.Cửa sổ.Hình thức.Khung.!(AdvertList.Đếm.ToString());
            }
        }
Ông đúng tìm thấy 15 quảng cáo trên trang, nhưng mỗi lần ra các dữ liệu của các đầu tiên, bạn có thể nói cho tôi biết tại sao không?

C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Mua CPU ổ cắm 1150
01.09.2015 18:02:00
300
[url]http://trường.duyên.pro/quảng cáo/kuplyu_processor_soket_1150_282745/[địa]
Thêm sau 2 giờ 43 phút
C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 nếu (AllNode != )
            {
                quốc x = 1;
                cho riêng mình (var nút trong AllNode) // đưa một trong quảng cáo
                {
                    chuỗi giá = "Không xác định";
 Giờ ngày = DateNormaliser(nút.SelectSingleNode("//*[@id=tính"alisttính"]/li[" + x + "] chìa khoá[1]").Chuyên đề);//ngày Tuyên bố //*[@id="alist"]/li[2] chìa khoá[1]
                    chuỗi liên kết = nút.SelectSingleNode("//*[@id=tính"alisttính"]/li[" + x + "] chìa khoá[2]/[2]").Tính["a"].Giá trị;
                    chuỗi tên = nút.SelectSingleNode("//*[@id=tính"alisttính"]/li[" + x + "] chìa khoá[2]/[2]/nhịp").Chuyên đề;
                    nếu (nút.SelectSingleNode("//*[@id=tính"alisttính"]/li[" + x + "] chìa khoá[3]//nhịp")!=) // Ngoại lệ nếu không có giá.
 giá = nút.SelectSingleNode("//*[@id=tính"alisttính"]/li[" + x + "] chìa khoá[3]//nhịp").Chuyên đề;
 AdvertList.Thêm(mới quảng Cáo(tên giá, link, ngày));
 x + + của;
                }
 
                Hệ thống.Cửa sổ.Hình thức.Khung.!(AdvertList.Đếm.ToString());
            }
Quyết định đó là việc, nhưng vẫn không hiểu tại sao không di chuyển máy danh sách của li
Cuối cùng chỉnh sửa bởi Scrypto; 01.09.2015 trong 18:02.
Scrypto đang ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
0
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
Chiến binh
 Avatar cho _exp10der_
491 / 418 / 177
Đăng ký: 23.11.2014
Bài viết: 932
01.09.2015, 21:57 HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 4 (liên kết thường trực)
Trong sự vội vàng
C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
bằng cách sử dụng Hệ thống;
sử dụng Hệ thống.Nó;
sử dụng Hệ thống.Net.Http;
sử dụng Hệ thống.Luồng.Nhiệm vụ;
sử dụng Hệ thống.Web;
sử dụng Hệ thống.Ngược?Nó;
sử dụng HtmlAgilityPack;
 
nội bộ lớpchương Trình
{
    riêng tư tĩnh hiệu Chính(chuỗi[] đối số)
    {
 MainAsync().Chờ();
    }
 
    công tĩnh , v. Nhiệm vụ MainAsync()
    {
        chuỗi html;
 
        sử dụng (var khách hàng = mới HttpClient())
        {
 html = đang chờ đón khách hàng.GetStringAsync("http://market.karelia.pro/section/8/");
        }
 
        var doc = mới HtmlDocument();
 doc.LoadHtml(html);
 
        var pageCount =
            quốc.Phân Tích(HttpUtility.ParseQueryString(
                mới Uri(doc.DocumentNode.SelectSingleNode(".//*[@id='máy nhắn tin']/li[9]/a").GetAttributeValue("a", ""))
                    .Vấn
                ).Nhận("trang")
                );
 
        var nhiệm vụ = Đếm.Phạm vi(1, pageCount)
            .Chọn((n, tôi) => $"http://market.karelia.pro/section/8/?page={tôi 1}")
            .Chọn(
                không đồng bộ n =>
                {
                    sử dụng (var m = mới HttpClient())
                    {
                        trở lại đang chờ đón khách hàng.GetStringAsync(n);
                    }
                }).ToList();
 
        var kết quả = đang chờ đợi Nhiệm vụ.WhenAll(nhiệm vụ);
 
 
        var q = kết quả.SelectMany(n =>
        {
            var innerdoc = mới HtmlDocument();
 innerdoc.LoadHtml(n);
 
            var foo =
 innerdoc.DocumentNode.SelectNodes(".//*[@id='alist']/li")
                    .Chọn(x => mới
                    {
 link = x.SelectSingleNode("//hạng[@lớp='tên']/a").Tính["a"].Giá trị,
 tiêu đề = x.SelectSingleNode("//hạng[@lớp='tên']//khoảng[@lớp='đề']").Chuyên đề,
 giá = x.SelectSingleNode("//hạng[@lớp='giá']//nhịp").Chuyên đề
                    });
 
            trở lại foo;
        }).ToList();
 
        mới XDocument(mới XDeclaration("1.0", , ),
 mới XElement("gốc",
 q.Chọn(
 n =>
                        mới XElement("hàng", mới XElement(nameof(n.link), n.link),
 mới XElement(nameof(n.giá), n.giá), mới XElement(nameof(n.tiêu đề), n.tiêu đề))))).Tiết kiệm(
                                "result.xml");
    }
}
Đính kèm
Tập tin loại: rarKareliaParser.rar (rộng 1,75 NHẤT 10 xem)
__________________
Bức điện: @exp10der
_exp10der_ ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
1
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
Chiến binh
 Avatar cho _exp10der_
491 / 418 / 177
Đăng ký: 23.11.2014
Bài viết: 932
01.09.2015, 22:30 HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 5 (liên kết thường trực)
khó cho tôi cũng tương tự cũng xảy ra nhận thấy 
__________________
Bức điện: @exp10der
Cuối cùng chỉnh sửa bởi _exp10der_; 01.09.2015 trong 22:32.
_exp10der_ ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
0
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
110 / 110 / 64
Đăng ký: 03.06.2013
Bài viết: 584
01.09.2015, 22:37 HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 6 (liên kết thường trực)
Và các nút có cùng thông tin, nếu Có, có khả năng đề là
C#mã để phân Bổ
1
AdvertList.Thêm(mới quảng Cáo(tên giá, link, ngày));
Mỗi khi bạn tạo ra một ví dụ, và sau đó phân. hay loại
C#mã để phân Bổ
1
2
3
4
5
mới quảng Cáo()
{
này.tên = tên;
//và vì vậy, trên
}
MaxSlim ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
0
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
68 / 69 / 26
Đăng ký: 08.02.2013
Bài viết: 415
Hoàn thành kiểm tra: 1
01.09.2015, 22:58 [Lực lượng đặc nhiệm] HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 7 (liên kết thường trực)
MaxSlimvà thực hiện.
Scrypto đang ẩn Để vẽ chính quyền sự chú ý của tin nhắn này
0
Thêm 1 để đánh giá của thông điệp và tác giả của nó Multiliteracies tin nhắn này Nhanh trả lời tin nhắn này
26 / 26 / 27
Đăng ký: 25.07.2013
Bài viết: 138
02.09.2015, 15:58 HtmlAgilityPack để Otparit trang[Đánh dấu[Trả lời] 8 (liên kết thường trực)
C#mã để phân Bổ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var AllNode = PostsParser.DocumentNode.SelectNodes("//*[@id='alist']/li");
            nếu (AllNode != )
            {
                chuỗi ngày;
                chuỗi liên kết ;
                chuỗi tên;
                chuỗi giá;
                cho riêng mình (var nút trong AllNode) 
                {
 ngày = ParseData(nút.OuterHtml, "//*[@lớp='ngày']")[0].Chuyên đề;
 link = ParseData(nút.OuterHtml, "//hạng[@lớp='tên']//*")[1].Tính["a"].Giá trị;
 tên = ParseData(nút.OuterHtml, "//*[@lớp='tên']//nhịp")[0].Chuyên đề;
 
                    nếu (ParseData(nút.OuterHtml, "//hạng[@lớp='giá']//nhỏ") != )
                    {
 giá = ParseData(nút.OuterHtml, "//hạng[@lớp='giá']//nhỏ")[0].Chuyên đề;
                    }
                    khác
                    {
 giá = ParseData(nút.OuterHtml, "//hạng[@lớp='giá']//nhịp")[0].Chuyên đề;
                    }
 AdvertList.Thêm(mới Quảng cáo(tên giá, link, ngày)); 
                }
            }
 
công tĩnh HtmlNodeCollection ParseData(chuỗi html, chuỗi khởi động)
        {
 HtmlAgilityPack.HtmlDocument doc = mới HtmlAgilityPack.HtmlDocument();
 doc.LoadHtml(html);
 
            var nodeCollection = doc.DocumentNode.SelectNodes(khởi động);
 
            trở lại nodeCollection;
        }
Thêm sau 35 giây
Bây giờ nó dường như làm việc 

Phản Hồi Độc Giả

Một số lưu ý khi bình luận

Mọi bình luận sai nội quy sẽ bị xóa mà không cần báo trước (xem nội quy)

Bấm Thông báo cho tôi bên dưới khung bình luận để nhận thông báo khi admin trả lời

Để bình luận một đoạn code, hãy mã hóa code trước nhé