Pythonを一から勉強してデータ分析できるようになる

~ Pythonとデータ分析のお勉強の記録 ~

スクレイピング:リンクの抽出と加工

[Take0] とりあえず、リンクタグ(href)を抜き出す。

 

【書式】

値=要素.get("属性名")
 
例)
 
 
 
属性名:a
 
 
値=要素.get("属性名")
例)
属性名:a
 

 

【コード】

import requests
from bs4 import BeautifulSoup
 
# webページを取得して解析する
response=requests.get(load_url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
 
 
# classで検索して、その中の全てのaタグを検索して表示する。
for element in soup.find_all("a"):
  print("タグ:",element)
  print("タグのデータ型:",type(element))
  print("タグのテキスト:",element.text)
  url=element.get("href")
  print("リンク:",url)
  print("\n")
 

 

【結果】

タグのデータ型: <class 'bs4.element.Tag'>
タグのテキスト: リンク1
 
 
タグ: <a href="../../../2021/02/07/000000">リンク2</a>
タグのデータ型: <class 'bs4.element.Tag'>
タグのテキスト: リンク2
リンク: ../../../2021/02/07/000000
 

 

# 元HTML

 

<div class="entry-content hatenablog-entry">

  <p> </p>

  <div id="chap1">

    <h2 id="第1章-小旅行の行先検討">第1章 小旅行の行先検討</h2>

    <ol>

      <li>近場が良いか?</li>

      <li>温泉が良いか?</li>

      <li>電車か車か?</li>

    </ol>

  </div>

  <div id="chap2">

    <h2 id="第2章-到着したら科飯にしよう">第2章 到着したら科飯にしよう</h2>

    <ol>

      <li>早速のお食事</li>

      <li>まずは、眺めて楽しもう</li>

      <li>お上品に食べ進めよう</li>

      <li>お酒はほどほどに!</li>

    </ol>

  </div>

  <p>

    <a href="https://20200105.hatenadiary.jp/entry/2021/05/02/000000">リンク1</a>

    <a href="../../../2021/02/07/000000">リンク2</a>

    <br/><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142330.jpg"/>

    <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142318.jpg"/>

    <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142307.jpg"/>

  </p>

</div>

 

 

[Take1] 相対URLがまざっているので、を絶対URLに変換する

 

【書式】

urllibライブラリを使用する。
書式)
parse.urljoin(ベースURL,調べるURL)
 

 

【コード】

import requests
from bs4 import BeautifulSoup
import urllib
 
# webページを取得して解析する
response=requests.get(load_url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
 
 
# 全てのaタグを検索して、リンクを絶対URLで表示する。
for element in soup2.find_all("a"):
  print("タグ:",element)
  print("タグのデータ型:",type(element))
  print("タグのテキスト:",element.text)
  url=element.get("href")
  print("リンク:",url)
  # 相対URLを書き換え
  link_url=urllib.parse.urljoin(load_url,url)
  print("補正後URL:",link_url)
  print("\n")
 

 

【結果】

タグのデータ型: <class 'bs4.element.Tag'>
タグのテキスト: リンク1
 
 
タグ: <a href="../../../2021/02/07/000000">リンク2</a>
タグのデータ型: <class 'bs4.element.Tag'>
タグのテキスト: リンク2
リンク: ../../../2021/02/07/000000
 

 

戻り値を整理しておく。

 

[Take2] このリンクのリストをテキストファイルに書き出してみる。

 

【書式】

f=open(filename,mode="w")
f.write(書き込む値)
f.close()
 

 

【コード】

import requests
from bs4 import BeautifulSoup
import urllib
 
# webページを取得して解析する
response=requests.get(load_url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
 
 
# ファイルを書き込みモードで開く
filename="/content/drive/MyDrive/Python_2024/001/linklist.txt"
 
with open(filename,"w") as f:
  # 全てのaタグを検索し、リンクを絶対URLで書き出す
  for element in soup.find_all("a"):
    url=element.get("href")
    link_url=urllib.parse.urljoin(load_url,url)
    f.write(element.text+"\n")
    f.write(link_url+"\n")
    f.write("\n")
 

 

【結果】