我有點鹹菜。有一張我想在網站上抓取的圖像列表。我知道如何做到這一點,但我必須過濾出圖像的位置。標籤中的C#HTML標籤
如我想要抓住一個ID爲「theseImages」的div標籤中的圖像,但另一個div標籤中有另一組圖像,其ID爲「notTheseImages」。將每個標籤循環到具有標籤「img」的HtmlElementCollection中,將忽略div,因爲它也會從「notTheseImages」中獲取圖像。
有沒有一種方法可以循環顯示圖像,同時檢查這些圖像在div標籤中的位置?
我有點鹹菜。有一張我想在網站上抓取的圖像列表。我知道如何做到這一點,但我必須過濾出圖像的位置。標籤中的C#HTML標籤
如我想要抓住一個ID爲「theseImages」的div標籤中的圖像,但另一個div標籤中有另一組圖像,其ID爲「notTheseImages」。將每個標籤循環到具有標籤「img」的HtmlElementCollection中,將忽略div,因爲它也會從「notTheseImages」中獲取圖像。
有沒有一種方法可以循環顯示圖像,同時檢查這些圖像在div標籤中的位置?
這可以幫助你做你的當前HTML的選擇,也許對未來occassions :)
protected HtmlElement[] GetElementsByParent(HtmlDocument document, HtmlElement baseElement = null, params string[] singleSelectors)
{
if (singleSelectors == null || singleSelectors.Length == 0)
{
throw new Exception("Please give at least 1 selector!");
}
IList<HtmlElement> result = new List<HtmlElement>();
bool last = singleSelectors.Length == 1;
string singleSelector = singleSelectors[0];
if (string.IsNullOrWhiteSpace(singleSelector) || string.IsNullOrWhiteSpace(singleSelector.Trim()))
{
return null;
}
singleSelector = singleSelector.Trim();
if (singleSelector.StartsWith("#"))
{
var item = document.GetElementById(singleSelector.Substring(1));
if (item == null)
{
return null;
}
if (last)
{
result.Add(item);
}
else
{
var results = GetElementsByParent(document, item, singleSelectors.Skip(1).ToArray());
if (results != null && results.Length > 0)
{
foreach (var res in results)
{
result.Add(res);
}
}
}
}
else if (singleSelector.StartsWith("."))
{
if (baseElement == null)
{
baseElement = document.Body;
}
foreach (HtmlElement child in baseElement.Children)
{
string cls;
if (!string.IsNullOrWhiteSpace((cls = child.GetAttribute("class"))))
{
if (cls.Split(' ').Contains(singleSelector.Substring(1)))
{
if (last)
{
result.Add(child);
}
else
{
var results = GetElementsByParent(document, child, singleSelectors.Skip(1).ToArray());
if (results != null && results.Length > 0)
{
foreach (var res in results)
{
result.Add(res);
}
}
}
}
}
}
}
else
{
HtmlElementCollection elements = null;
if (baseElement != null)
{
elements = baseElement.GetElementsByTagName(singleSelector);
}
else
{
elements = document.GetElementsByTagName(singleSelector);
}
foreach (HtmlElement item in elements)
{
if (last)
{
result.Add(item);
}
else
{
var results = GetElementsByParent(document, item, singleSelectors.Skip(1).ToArray());
if (results != null && results.Length > 0)
{
foreach (var res in results)
{
result.Add(res);
}
}
}
}
}
return result.ToArray();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// here we can query
var result = GetElementsByParent(webBrowser1.Document, null, "#theseImages", "img");
}
結果,那麼可能會包含在#theseImages
心靈你GetElementsByParent是圖像相當未經測試,我只是測試它的用例,它似乎是好的。
不要忘記,一旦你確認文檔完成只是開始查詢;)
感謝您的支持! – hanahouhanah
歡迎您和@hanahouhanah如果它回答您的問題,然後隨意標記它以及:) – Icepickle
您使用的,您使用與WebBrowser組件的WinForms什麼?如果是這樣,你可以得到div本身,然後循環到childcollection獲得有問題的圖像,你可以顯示一些代碼,並顯示你到目前爲止嘗試過嗎? (我也是一個小菜一碟:D) – Icepickle
請顯示一些代碼 –
使用CSQuery(它有jQuery風格的選擇器)可以很容易地從網頁的HTML中分離出集合。最好展示你已經嘗試的HTML和代碼。 :) –