Amazonランキングのデータを取得

書籍「Pythonでスクレイピングを始めよう: for Macユーザー入門学習編」のサンプルプログラムです。

import requests
from bs4 import BeautifulSoup
import os
import re


#関数
def datamain():
    data=[]
    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15'
    header = {
        'User-Agent': user_agent
    }
    url='https://www.amazon.co.jp/gp/bestsellers/amazon-devices/ref=zg_bs_nav_0'
    r=requests.get(url,headers=header)
    soup=BeautifulSoup(r.text, 'lxml')
    elems=soup.select('.a-link-normal')
    
    for a in elems:
    	data.append(a.text)
    	value=a.get("href")
    	data.append(value)
    return data
    
        
def selectdata():
    sort1=[]
    with open("link.txt") as f:
    	reader=f.readlines()
    for x in reader:
        link=re.search(r"dp/\w+",x)
        c=re.search(r"ポイント\(\d+%\)",x)
        if link is not None:
            nlink=(link.group())
            if nlink in sort1:
                pass
            if nlink not in sort1:
	            nlink2=("https://www.amazon.co.jp/" + nlink)
	            with open("sorted.txt","a") as f:
		            f.write(nlink2+"\n")
	            sort1.append(nlink)
        elif '5つ星のうち' in x or '/product-reviews' in x:
            pass
        elif c is not None:
            pass
        else:
            with open("sorted.txt","a") as f:
                f.write(x)
        
    with open("sorted.txt") as f:
        reader1=f.readlines()
    for x1 in reader1:
        p=re.search(r"¥\d*,?\d*",x1)
        if len(x1)==1:
            pass
        else:
            if p is not None:
                with open("result.txt","a") as f:
                    f.write(x1+"\n\n")
            else:                
                with open("result.txt","a") as f:
                    f.write(x1)
    
    
#メインプログラム
if __name__ == '__main__':
    if os.path.isfile("result.txt"):
        os.remove("result.txt")
        os.remove("link.txt")
        os.remove("sorted.txt")

    datas=datamain()
    for d in datas:
        d=d.strip()
        with open("link.txt","a") as f:
            f.write(d + "\n")
    
    selectdata()


Amazonのオリジナルデバイス・アクセサリのランキングに入っている商品のデータを取得するプログラムです。

詳しい解説は書籍をご覧いただけると嬉しいです。


この記事が気に入ったらサポートをしてみませんか?