Web Scrapper_02


実際には、WastackoverflowのWebサイトに就職情報をもたらすWeb scriperを作成することができます.

1.就職情報の取得(確実)


要求モジュールとBeautiful Soupライブラリ


  • requests
    主にAPIの使用に使用されます.HTTPメソッド(method、または関数)のGETとPOSTは、通常使用されます.GET使用時にリクエストします.get()を使用し、POSTを使用するときに要求します.post()を使用します.
  • Beautiful Soup
    デフォルトでは、パッケージimportでhtmlファイルをインポートするか、urllibまたはrequestsモジュールで直接Webからソースファイルをインポートできます.
  • 1.1最終ページの取得

    def get_last_page():
        result = requests.get(URL)					# 1.1.1
        soup = BeautifulSoup(result.text, "html.parser")		# 1.1.2
        pagination = soup.find("div", {"class":"pagination"})   	# 1.1.3
        links = pagination.find_all('a')				# 1.1.4
        pages = []
        for link in links[:-1]:   					# 1.1.5
            pages.append(int(link.find("span").string))		# 1.1.6
        
        max_page = pages[-1]					# 1.1.7
        return max_page						# 1.1.8
    1.1.1要求によりWeb上のソースを取得することができる.
    1.1.2データ抽出(データ抽出)
    1.1.3クラス名がページングされたdivの検索
    1.1.4すべてのa(アンカー)を検索してリストを作成し、links変数に入れる
    1.1.5文字列(文字列)であるため、最後の値を除外
    1.1.6 spanを検索しpagesという配列に入れる
    1.1.7ページの最後の値(-1)
    1.1.8 max pageを返す

    1.2就職情報辞典

    def extract_job(html):
        title = html.find("h2", {"class": "title"}).find("a")["title"]
        company = html.find("span", {"class": "company"})   			# 1.2.1
        company_anchor = company.find("a")
        if company:    		 						# 1.2.2
            company_anchor = company.find("a")
            if company_anchor is not None:
                company = str(company_anchor.string)
            else:
                company = str(company.string)
            company = company.strip()       					# 1.2.3
        else:
            company = None    
        location = html.find("div", {"class": "recJobLoc"})["data-rc-loc"]		# 1.2.4
        job_id = html["data-jk"]        						# 1.2.5
        return {
            'title': title,
            'company': company,
            'location': location,
            "link": f"https://kr.indeed.com/viewjob?jk={job_id}"
            }
    1.2.1 find最初の結果のみ表示
    1.2.2会社はありますか?
    1.2.3文字列の文字を削除します.この場合、スペースで始まる文字を削除します<-スペースを削除します
    1.2.4 data-rc-locの値.divのプロパティへのアクセス
    1.2.5 htmlからdivのdata-jk値(=ジョブid)を取得する

    1.3就職情報のリスト

    def extract_jobs(last_page):
        jobs = []
        for page in range(last_page):
            print(f"Scrapping Indeed: Page: {page}")
            result = requests.get(f"{URL}&start={page*LIMIT}")    			# 1.3.1
            soup = BeautifulSoup(result.text, "html.parser")
            results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})	# 1.3.2
            for result in results:
                job = extract_job(result)       					# 1.3.3
                jobs.append(job)        						# 1.3.4
        return jobs
    1.3.1ページ要求
    1.3.2 find allすべてのリストを取得する
    1.3.3 extract job関数を呼び出すことによってhtmlパラメータを受信する.ここでhtmlはリクエスト結果を含む結果である.
    1.3.4この関数はジョブを返し、ジョブという名前の配列に戻ります.