JuliaでWebスクレイピングを行うにはどうすればよいですか?


8

このサイトから大学名とそのウェブサイトの名前をリストに抽出したいと思います。

Pythonでは、BeautifulSoup v4を使用しました。

import requests
from bs4 import BeautifulSoup
import pandas as pd

page = requests.get('https://thebestschools.org/features/best-computer-science-programs-in-the-world/')
content = BeautifulSoup(page.text, 'html.parser')

college_name = []
college_link = []
college_name_list = content.find_all('h3',class_='college')
for college in college_name_list:
    if college.find('a'):
        college_name.append(college.find('a').text)
        college_link.append(college.find('a')['href'])

私はジュリアでのプログラミングが本当に好きで、Pythonに非常に似ているので、ジュリアでもWebのスクレイピングができるかどうか知りたいと思っていました。任意の助けいただければ幸いです。


1
ヒント:スタックオーバーフローでXを実行するために、どのパッケージが存在するか尋ねないでください。常にXの方法を尋ねるだけです。2つの理由があります。1つのショッピングの質問がすぐに閉じられます。2パッケージまたは標準ライブラリ関数の使用方法を示すより良い答えを得ます。
— リンドンホワイト

自分で探索したい場合は、pkg.julialang.orgにアクセスして、検索フィールドに「html」と入力してください。また、「xml」。xmlのようなドキュメントを探索するための多くのパッケージが見つかります。
— Tasos Papastylianou

回答:


4

あなたのPythonコードはうまく機能しません。最近、ウェブサイトが更新されたと思います。彼らが私の知る限りリンクを削除したので、。Gumbo.jlとCascadia.jlを使用した同様の例を次に示します。

組み込みdownloadコマンドを使用してWebページをダウンロードしています。これを一時ファイルのディスクに書き込み、それを文字列に読み取ります。HTTP.jlを使用すると、文字列に直接読み取ることができるため、よりクリーンな場合があります。しかし、この簡単な例では問題ありません

using Gumbo
using Cascadia

url = "https://thebestschools.org/features/best-computer-science-programs-in-the-world/"

page = parsehtml(read(download(url), String))


college_name = String[]
college_location = String[]


sections = eachmatch(sel"section", page.root)
for section in sections
    maybe_col_heading = eachmatch(sel"h3.college", section)
    if length(maybe_col_heading) == 0
        continue
    end
    col_heading = first(maybe_col_heading)

    name = strip(text(last(col_heading.children)))
    push!(college_name, name)

    loc = first(eachmatch(sel".school-location", section))
    push!(college_location, text(loc[1]))
end


[college_name college_location]

アウトプット

julia> [college_name college_location]
51×2 Array{String,2}:
 "Massachusetts Institute of Technology (MIT)"  "Cambridge, Massachusetts"
 "Massachusetts Institute of Technology (MIT)"  "Cambridge, Massachusetts"
 "Stanford University"                          "Stanford, California"
 "Carnegie Mellon University"                   "Pittsburgh, Pennsylvania"
 ⋮

 "Shanghai Jiao Tong University"                "Shanghai, China"
 "Lomonosov Moscow State University"            "Moscow, Russia"
 "City University of Hong Kong"                 "Hong Kong"

MITが2回リストされているようです。おそらく、私のデモのフィルタリングコードは静かではありません。しかし:shrug:MITは私が聞いた素晴らしい大学です。ジュリアはそこで生まれました:joy:


3

はい。

Juliaには、ウェブスクレイピングの目的で3つのライブラリがあります。

  • WebサイトのフロントエンドソースコードをダウンロードするHTTP.jl(これはpythonのrequestsライブラリに相当します)、
  • Gumbo.jlは、ダウンロードしたソースコードを解析して階層構造のオブジェクトにします。
  • そして、Cascadia.jlは、CSSセレクターAPIを使用して最終的にスクレイピングします。

私はあなたがあなたのプロファイルから若い(16)であり、あなたのpython実装も正しいことを見ました。

したがって、これらの3つのライブラリを使用してWebスクレイピングタスクを実行し、それらがどのように機能するかを理解することをお勧めします。

残念ながら、Cascadia では現在、Cascadia.jl ソースに実装されているSelectorTypeではないh3aに<span>ある ため、実行するタスクをまだ実行できません。


1
Cascadiaでこれを実行できることを確認してください。私はspanそれ自体でうまくいくと思いますか?CSSスタイルセレクタ経由
— リンドンホワイト

1
また、julia内のpythonインターフェース経由でbeautifulsoup自体を使用できることも指摘する価値があります。
— Tasos Papastylianou

@tasosは、それを行う方法を示す別の答えを作るかもしれませんか?
— リンドンホワイト

@LyndonWhiteええ、私はもう1つ追加しなくてもSOに十分なpycallの例がすでに十分あると確信しています...:p
— Tasos Papastylianou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.