@jr0406 (jr kikaku)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

スクレイピング結果のCSV出力について

解決したいこと

pythonでスクレイピングし、CSVに出力したいと思っておりますが、
CSV出力が上手くいきません。
解決方法を教えて頂きたいです。

発生している問題・エラー

エラーは出ませんが、作成されたCSVファイルに何も書き出されていないです。

該当するソースコード

import requests, bs4
import time
import os
import pandas as pd
import codecs
from urllib.parse import urljoin
import csv

data_col = ["information1", "information2"]

loopcnt = 1
dynamic_url = "https://www.jda-tnavi.com/kanagawa"
pageurlnow = "A"
while True:

if loopcnt == 1:
    pageurlnow = "https://www.jda-tnavi.com/kanagawa"
else:
    pageurlnow = "https://www.jda-tnavi.com/kanagawa/page/" + str(loopcnt)

res2 = requests.get(pageurlnow)
if bool(res2) == False:
    break
res2.raise_for_status()
soup = bs4.BeautifulSoup(res2.text, "html.parser")
elems1 = soup.select('.facilitieInfo')
elems2 = soup.select('.facilitieName')
print(str(pageurlnow))
csvlist = []
for elem1,elem2 in zip(elems1,elems2):
    print(elem1.text)
    print(elem2.text)

loopcnt = loopcnt +1
time.sleep(5)

f = open("output.csv", "w")
writecsv = csv.writer(f, lineterminator='\n')

writecsv.writerow(csvlist)

f.close()

自分で試したこと

他で調べたコードなども試してみましたが上手くいきません。
宜しくお願い致します。

0 likes

1Answer

こういうことかなぁと半分想像ですが、この様な感じでいかがでしょうか。

import requests, bs4
import time
import numpy as np

pft = 'kanagawa'

loopcnt = 1

while True:
    if loopcnt == 1:
        pageurlnow = 'https://www.jda-tnavi.com/' + pft
    else:
        pageurlnow = 'https://www.jda-tnavi.com/' + pft + '/page/' + str(loopcnt)

    res = requests.get(pageurlnow)
    res.raise_for_status()
    
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    
    pagelist=[]
    el0=[]
    el1=[]
    el2=[]

    els0 = soup.find_all(class_='corporateName')
    els1 = soup.find_all(class_='facilitieName')
    els2 = soup.find_all(class_='facilitieInfo')

    for p, q, r in zip(els0, els1, els2):
        el0.append(p.text)
        el1.append(q.text)
        el2.append(r.text)

    for i in range(len(els0)):
        pagelist.append(el0[i]+','+el1[i]+','+el2[i].replace('\n',','))
    
    with open('output_' + pft + '.csv', 'ab') as f:
        np.savetxt(f, pagelist, delimiter=',', fmt ='%s', encoding='shift-jis')
        print('Page:'+str(loopcnt)+' is saved.')
        loopcnt += 1
    
    time.sleep(5)

0Like

Your answer might help someone💌