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

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

スクレイピング:オーディオヴィジュアル製品のパッケージ画像URLを取得する

商品コードを検索キーにして、商品紹介ページにあるパッケージ画像のURLを取得したい。

amazonとかの著名ecサイトでは弾かれてしまうが、一応、動作したのでメモしておく。

(実際URLは伏せておく)

 

[TAKE1] まずは、コード番号から検索用のURLを生成し、そのリンク先のURLを取得する。

 

【考え方】

1.検索URLにおける次のタグを捕まえるのが目的。
 
<h2 class="entry-title"><a href="https://site1.com/374040/PNO-684">[PNO-684] ないすですね~</a></h2>
 
2.「soup.find(class_="entry-title")」で、定う術タグ全体を捕まえたのち、
 
3.「.select("a")」で、その中にあるaタグを取得。
 
4.次に、aタグの中の[href]の属性値を取得する感じ。

 

【コード】

import requests,bs4,time
 
result  = requests.get("https://site1.com/?s=PNO-684")
soup    = bs4.BeautifulSoup(result.content, "html.parser")
 
# elems   = soup.select("[class='entry-title']")
elems=soup.find(class_="entry-title").select("a")
 
for elem in elems:
    # print(type(elem))
    print(elem)
    # url=elem.select("a")
    # print(type(url))
    url     = elem.get("href")
    print(url)
    #1秒待機する(DoS攻撃になってしまうため)
    time.sleep(1)

 

【結果】

<a href="https://site1.com/374040/PNO-684">[PNO-684] ないすですね~</a> https://site1.com/374040/PNO-684

 

 

[take2] コード番号から、検索用URLを生成する過程を関数化する

 

【書式】

 

【コード】

import requests,bs4,time
 
def search_url(code_no):
  url="https://site1.com/?s=" + code_no
  return url
 
url=search_url("PNO-684")
print(url)

 

【結果】

 

 

[TAKE3] コード番号から、目的サイトのURL生成を関数化する

 

【書式】

 

【コード】

import requests,bs4,time
 
 
def tgt_url(code_no):
  url1  ="https://site1.com/?s=" + code_no
  result  = requests.get(url1)
  soup    = bs4.BeautifulSoup(result.content, "html.parser")
  # class_ はサイトの更新によって変更になる可能性有。
  elems=soup.find(class_="entry-title").select("a")
  for elem in elems:
    url2     = elem.get("href")
 
  return url2
 
 
url=tgt_url("PNO-684")
print(url)

 

【結果】

 

 

[TAKE4] 動画情報サイトのHTMLから目的のカバー画像URLを取得する。

 

【書式】

 

【コード】

import requests,bs4,time
 
result  = requests.get("https://site1.com/374040/PNO-684")
soup    = bs4.BeautifulSoup(result.content, "html.parser")
 
elems=soup.find(class_="entry-content").select("img")
# elems はリスト型なので、最初の要素の「src属性値」を取り出す
elem=elems[0].get("src")
 
print(elem)

 

【結果】

 

各変数の戻り値とデータ型は次の通り

 

[TAKE5] まとめ→ 各々を関数化し、コード番号からカバー画像URLを持ってくる。

 

【書式】

 

【コード】

import requests,bs4,time
 
def tgt_url(code_no):
  # コード番号に該当する動画の説明ページのURLを返す関数
  # 引数:動画コード番号
  # 戻値:動画説明ページURL
  url1  ="https://site1.com/?s=" + code_no
  result  = requests.get(url1)
  soup    = bs4.BeautifulSoup(result.content, "html.parser")
  # class_ はサイトの更新によって変更になる可能性有。
  # sou.findはリストを返すので、末尾に[0]をつけて一番目の要素を指定する
  elem=soup.find(class_="entry-title").select("a")[0]
  url2 = elem.get("href")
 
  return url2
 
def img_url(tgt_url):
  # 動画のカバー画像のURLを返す関数
  # 引数:動画説明URL
  # 戻値:カバー画像URL
  result  = requests.get(tgt_url)
  soup    = bs4.BeautifulSoup(result.content, "html.parser")
  elem=soup.find(class_="entry-content").select("img")[0]
  url3=elem.get("src")
 
  return url3
 
url=img_url(tgt_url("PNO-684"))
print(url)

 

【結果】