Web-scrape项目写了太多信息

时间:2017-07-22 15:43:51

标签: c# html web-scraping

我试图修改下面的代码,以便从www.itoworld.com/careers中删除工作。这些作业采用表格格式,并返回所有<<<<<<>>值。

我相信它来自这条线:

<a  class="std-btn" href="http://www.itoworld.com/office-manager/">Office Manager</a> 

但是,我想写它:

<a href='http://www.itoworld.com/office-manager/' target='_blank'>Office ManagerOffice & AdminCambridgeFind out more</a>

目前正在撰写

public string ExtractIto()
    {
        string sUrl = "http://www.itoworld.com/careers/";
        GlobusHttpHelper ghh = new GlobusHttpHelper();
        List<Links> link = new List<Links>();

        bool Next = true;
        int count = 1;

        string html = ghh.getHtmlfromUrl(new Uri(string.Format(sUrl)));
        HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument();
        hd.LoadHtml(html);
        var hn = hd.DocumentNode.SelectSingleNode("//*[@class='btn-wrapper']");

        var hnc = hn.SelectNodes(".//a");

        foreach (var node in hnc)
        {

            try
            {
                var parentnode = node.ParentNode.ParentNode.ParentNode.FirstChild.NextSibling; 
                Links l = new Links();
                l.Name = ParseHtmlContainingText(parentnode.InnerText);     
                l.Link = node.GetAttributeValue("href", "");


                link.Add(l);


            }

        }


        string Xml = getXml(link);

        return WriteXml(Xml);

我计划蛮力&#39;修改输出以删除不必要的额外内容,但希望有更聪明的方法来做到这一点。有没有办法在调用后删除第二个和第三个ParentNode? (所以他们不写?)

 public string ParseHtmlContainingText(string htmlString)
    {
        return Regex.Replace(Regex.Replace(WebUtility.HtmlDecode(htmlString), @"<[^>]+>|&nbsp;", ""), @"\s{2,}", " ").Trim(); 
    }

为了完整性,下面是ParseHtmlContainingText的定义

php artisan config:clear

1 个答案:

答案 0 :(得分:0)

您只需要创建一个“名称节点”并将其用于您的解析方法。

我使用此代码进行测试,它对我有用。

            var parentnode = node.ParentNode.ParentNode.ParentNode.FirstChild.NextSibling;
            var nameNode = parentnode.FirstChild;

            Links l = new Links();
            l.Name = ParseHtmlContainingText(nameNode.InnerText);
            l.Link = node.GetAttributeValue("href", "");