1

サイトのさまざまなページからデータをスクレイピングしています。要素 (H1、alt タグ、メタ タイトルなど) が存在するかどうか、一意であるかどうかに基づいて、合計スコアにポイントを割り当てたいと考えています。重複。カスタムクラスを使用して保存している、スクレイピングするすべての要素に対してこれを実行できるメソッドを作成したいと思います。

public class PageData
{
    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    public string PageUrl { get; set; }

    public string Analytics { get; set; }

    public bool Paginated { get; set; }

    public bool Flash { get; set; }

    public bool Iframe { get; set; }

    public bool NoIndexFollow { get; set; }

    public bool SchemaTag { get; set; }

    public virtual ICollection<Platform> Platforms { get; set; }

    public virtual ICollection<AltTag> AltTags { get; set; }

    public virtual ICollection<Canonical> Canonicals { get; set; }

    public virtual ICollection<MetaTitle> MetaTitles { get; set; }

    public virtual ICollection<MetaDesc> MetaDescs { get; set; }

    public virtual ICollection<BlogLocation> BlogLocations { get; set; }

    public virtual ICollection<H1> H1s { get; set; }

    public virtual ICollection<H2> H2s { get; set; }

    public virtual ICollection<H3> H3s { get; set; }

    public virtual ICollection<ViewState> ViewStates { get; set; }
}


public class H1
{
    public H1() { }

    public H1(int id, string h1)
    {
        this.Id = id;
        this.H1String = h1;
    }

    public override string ToString()
    {
        return H1String;
    }

    [Key]
    public int KeyId { get; set; }

    public string H1String { get; set; }

    [ForeignKey("PageData")]
    public int Id { get; set; }

    [ScriptIgnore]
    public virtual PageData PageData { get; set; }


}

点数配分を試す方法

public void pageCheck(SiteData site, dynamic pageObj, int lowAssignedScore, int highAssignedScore, int totalScore)
    {
        List<string> uniqueCheckList = new List<string>();
        bool uniqueCheck = true;

        foreach (PageData page in site.PageDatas)
        {
            if (pageObj.Count != 0)
            {
                foreach (var modelObj in pageObj)
                {
                    if (uniqueCheckList.Contains(modelObj.ToString()))
                    {
                        totalScore =+ lowAssignedScore;
                        uniqueCheck = false;
                        break;
                    }
                    uniqueCheckList.Add(modelObj.ToString());
                }
                if (uniqueCheck)
                {
                    totalScore += highAssignedScore;
                }
            }
    }

必要なページの要素を渡すために、新しいページ オブジェクトをインスタンス化しています。

PageData page = new PageData();

pageCheck(site, page.H1s, 4, 6, totalScore); 

page.H1s を渡すと、{System.Collections.Generic.List < Bescoured.Models.PageModels.H1 > } のようになります。

私がやろうとしていることをC#で行う方法はありますか? それとも、言語の静的な性質のために許可されませんか? H1に固有のメソッドを作成することから始めて、それを汎用にしようとしましたが、要素ごとにメソッドを作成する必要があるようです。

編集:

各要素のメソッドを作成した場合の方法の例

foreach (PageData page in site.PageDatas)
            {
                if (page.H1s.Count != 0)
                {
                    foreach (H1 h1 in page.H1s)
                    {
                        if (h1s.Contains(h1.H1String))
                        {
                            totalScore += 4;
                            uniqueCheck = false;
                            break;
                        }
                        h1s.Add(h1.H1String);
                    }
                    if (uniqueCheck)
                    {
                        totalScore += 6;
                    }
                }
            }
4

1 に答える 1