0

概要

私はサプライ チェーン マネジメント大学のプロジェクトに取り組んでおり、Web サイトへの毎日の投稿を分析して、サービス/製品に対する業界の需要を分析および文書化したいと考えています。毎日変更され、コンテナとページの量が異なる特定のページ:

https://buyandsell.gc.ca/procurement-data/search/site?f%5B0%5D=sm_facet_procurement_data%3Adata_data_tender_notice&f%5B1%5D=dds_facet_date_published%3Adds_facet_date_published_today

バックグラウンド

コードは、HTML タグをスクレイピングしてデータ ポイントを文書化することにより、csv ファイル (ヘッダーは気にしないでください) を生成します。「for」ループを使用しようとしましたが、コードはまだ最初のページしかスキャンしていません。

Python 知識レベル : 初心者、YouTube やグーグルで「苦労」を学びます。私の理解レベルではうまくいったが、人々のさまざまなソリューションを組み合わせるのに問題がある例を見つけました。

現時点でのコード

urllib.request から bs4 をインポート bs4 から uReq として urlopen をインポート スープとして BeautifulSoup をインポート

問題はここから始まる

for page in range (1,3):my_url = 'https://buyandsell.gc.ca/procurement-data/search/site?f%5B0%5D=sm_facet_procurement_data%3Adata_data_tender_notice&f%5B1%5D=dds_facet_date_published%3Adds_facet_date_published_today'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div",{"class":"rc"})

この部分は、既存の項目に追加して書き込みません

filename = "BuyandSell.csv"
f = open(filename, "w")
headers = "Title, Publication Date, Closing Date, GSIN, Notice Type, Procurement Entity\n"
f.write(headers)

for container in containers:
    Title = container.h2.text

    publication_container = container.findAll("dd",{"class":"data publication-date"})
    Publication_date = publication_container[0].text

    closing_container = container.findAll("dd",{"class":"data date-closing"})
    Closing_date = closing_container[0].text

    gsin_container = container.findAll("li",{"class":"first"})
    Gsin = gsin_container[0].text

    notice_container = container.findAll("dd",{"class":"data php"})
    Notice_type = notice_container[0].text

    entity_container = container.findAll("dd",{"class":"data procurement-entity"})
    Entity = entity_container[0].text

    print("Title: " + Title)
    print("Publication_date: " + Publication_date)
    print("Closing_date: " + Closing_date)
    print("Gsin: " + Gsin)
    print("Notice: " + Notice_type)
    print("Entity: " + Entity)

    f.write(Title + "," +Publication_date + "," +Closing_date + "," +Gsin + "," +Notice_type + "," +Entity +"\n")

f.close()

さらに見たい場合はお知らせください。Rest は、HTML コードで検出され、csv に出力されるデータ コンテナーを定義しています。ヘルプ/アドバイスをいただければ幸いです。ありがとう!

実際の結果:

コードは、最初のページに対してのみ CSV ファイルを生成します。

コードは、少なくとも (毎日) 既にスキャンされたものの上に書き込まれません。

予想された結果 :

コードは次のページをスキャンし、通過するページがないことを認識します。

CSV ファイルは、1 ページあたり 10 行の csv を生成します。(数字は常に 10 とは限らないため、最後のページに表示される金額はいくらでもあります)。

コードは、既にスクレイピングされたものの上に書き込みます (履歴データを使用した Excel ツールを使用したより高度な分析用)。

4

1 に答える 1