http://www.cyberforum.ru/csharp-beginners/thread1522563.html
HtmlAgilityPack để Otparit trang
31.08.2015, 15:02. Xem 1832. Câu trả lời 7
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 != vô)
{
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.
|
 |
0
 |
Đăng ký: 08.02.2013
Bài viết: 415
|
| 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 != vô)
{
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 != vô)
{
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")!=vô) // 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.
|
 |
0
 |
|
Chiến binh
Đă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", vô, vô),
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");
}
}
|
|
__________________ Bức điện: @exp10der
|
 |
1
 |
|
Chiến binh
Đă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.
|
 |
0
 |
Đă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
}
|
|
|
 |
0
 |
Đă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 != vô)
{
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ỏ") != vô)
{
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âyBây giờ nó dường như làm việc 
|
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é