Python スクレイピング 同じ項目は同じ列に記載、異なる項目は新しく列を追加して記載する方法
当方初心者であり、申し訳ないのですが皆様のお知恵を拝借したいです。
いろいろ検索したのですが、良い方法(どこから手をつけるべきか)がわからず、
困っております。アドバイスいただけますと幸いです。
ページをスクレイピングして、CSVに下記のようなデータを書き出すプログラムを作りました。
a,b,d,x,テスト
3354,test,あいうえ,いろはに,12345
この時、複数のページをスクレイピングして同様の情報を取得するプログラムを実行し、
行を追加して値を記載していくプログラムを作りたいと考えています。
ただ、ページ毎にカラム名が同じ場合もあれば、異なる場合もあります。
もし、スクレイピングした2ページ目がこのような値の場合は、
a,b,d,y,テスト
3399,TEST,あいうえ,ほへと,12345
CSVに書き出す場合は下記のように記載したいと考えています。
a,b,d,x,テスト,y
3354,test,あいうえ,いろはに,12345
3399,TEST,あいうえ,,12345,ほへと
※基本的には順に行追加で値が記載されていき、
新しい項目の場合は一番右側に列が追加されそこに記載されていく、、という流れです。
複数ページに順にアクセスして、それぞれのページの情報を取得するコードはできたのですが、各項目に希望通りにCSVに書き出す部分が不明です。
この場合、どのようなプログラムが適切でしょうか?
何か参考になる具体的なコード、サイトなどありましたら、
教えて頂けませんでしょうか。。。。。
【追記】
質問を頂きありがとうございます。
カラムにある記載を事前に予想できないことがネックとなります。
取得する情報は1ページ毎に商品のスペック情報のようなものです。
Aという商品にはa,b,c,dというスペックの項目があり(上記で言うカラムにある記載)、
それぞれに対して、あ,い,う,えという値が取得できます。
Bという商品を取得すると、Aという商品と同じスペック項目はあるケースもありますが(ただし値は異なる)、Bにしかないスペック項目もあります。
毎度取得する情報はスペック項目と値のセットとなりますので、
a,b,d,x,テスト,y
3354,test,あいうえ,いろはに,12345
3399,TEST,あいうえ,,12345,ほへと
取得する毎に上記のように行が追加され、且つ以前取得したスペック項目が無い場合は、
新しく追加されていくことが理想です。
【追記2】
現在のコードは下記のようにしておりまして、
ページを読み込む→データを取得→CSVに書き込むというのをfor文で作成しています。
for num in range(1,xxx):
urlclick = driver.find_element_by_xpath('xxxxxxxxxxx'.format(num))
urlclick.click()
driver.window_handles
driver.switch_to.window(driver.window_handles[1])
currentURL = driver.current_url
html = urlopen(currentURL)
bsObj = BeautifulSoup(html, "html.parser")
table = bsObj.findAll("table", {"class":"xxxxxxxxxxx'"})[0]
rows = table.findAll("tr")
data = []
for row in rows:
csvRow = []
for cell in row.findAll(['td', 'th']):
csvRow.append(cell.get_text(strip=True))
data.append(csvRow)
col1 = [a[:2] for a in data]
col2 = [a[2:] for a in data]
col1.extend(col2)
row1 = [a[:1] for a in col1]
row2 = [a[1:] for a in col1]
row1 = sum(row1, [])
row2 = sum(row2, [])
array2d = [row1, row2]