スクレイピング:オーディオヴィジュアル製品のパッケージ画像URLを取得する
商品コードを検索キーにして、商品紹介ページにあるパッケージ画像のURLを取得したい。
amazonとかの著名ecサイトでは弾かれてしまうが、一応、動作したのでメモしておく。
(実際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
【書式】
【コード】
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)
【結果】
【書式】
【コード】
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)
【結果】
【書式】
【コード】
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)
【結果】
各変数の戻り値とデータ型は次の通り
【書式】
【コード】
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)
【結果】