#seleniumでスクレイプしてcsvに出力したい
指定サイトのページをスクレイプしcsvに出力したいのですが…下記の数点がうまくいきません。
何卒ご教示の程よろしくお願いします。
1.改行コードが消えない
2.CP932で出力できない
まず初めに対象コードと指定サイトです。
※sd.textはURLリストが格納されているだけです。
対象サイト:https://www.superdelivery.com/p/r/pd_p/4874875/
python
1 2import urllib.request, urllib.error 3import requests 4import csv 5import time 6import asyncio 7import codecs 8from bs4 import BeautifulSoup 9from selenium import webdriver 10 11 12 13 14def scraping(): 15with open('sd.txt') as f: 16for line in f.readlines(): 17yield line.strip() 18 19 20for target_url in scraping(): 21driver = webdriver.Chrome('chromedriver.exe') 22driver.set_window_size(1280, 720) 23 24time.sleep(2) 25driver.find_element_by_class_name('log-btn').click() 26driver.find_element_by_name('identification').send_keys('test@biglobe.ne.jp') 27driver.find_element_by_name('password').send_keys('xxxxxxx') 28driver.find_element_by_xpath('//*[@id="jsp-tiles-certification-c"]/form/div/div[1]/div[1]/div[6]/div/span/input').click() 29 30time.sleep(2) 31 32 33html = driver.page_source.encode('utf-8') 34soup = BeautifulSoup(html, 'html.parser') 35 36title = soup.find('span', class_='product-name').text.strip() 37imgage = soup.findAll('div', id='thumbImageBox') 38explaine = soup.find('table' , class_='product-comment-wrap').text.strip().replace(chr(165),"").replace('\r\n', '') 39jan =soup.find('div' , class_='co-fcgray td-jan').string.strip() 40open_price = soup.find('td' , class_='border-rt td-price01 co-pc-only co-pr5').text.strip().replace(chr(165),"") 41whole_price = soup.find('td' , class_='maker-wholesale-set-price').text.strip().replace(chr(165),"") 42size =soup.findAll('td',{'class':'co-p0'})[1].text.strip() 43attention =soup.findAll('td',{'class':'co-p0'})[2].text.strip() 44model = soup.findAll('td' , class_='tr-last co-ts-only').text.strip().replace(chr(165),"") 45 46 47 48for f in imgage: 49for link in f.findAll('img'): 50imgoutput = link.attrs['src'] 51imgurl = 'https:' + imgoutput 52 53with open('sd.csv', 'a', newline='' , encoding='UTF-8') as f: 54writer = csv.writer(f) 55writer.writerow([title,model,imgurl,explaine,jan,open_price,whole_price,size]) 56 57driver.quit()
1.改行コードが消えない
explaine、modelの部分での改行が消えません。
explaineの取得しているHTMLは下記になります。
CR?改行コードが入ってしまいテキストエディタで開いても、csvで開いても改行コードが消えていません。
html
1<div id="product_comment_sp" class="product-comment"> 2<a name="_top">大切なバッグをキズや型崩れから守りながら、コンパクトに収納!<br> 3ハンガーフック付なので、取り付け・取り外しが簡単!<br> 4両サイドがメッシュ仕様で、見やすく出し入れ+通気性にすぐれています!</a><span style="display:none;"></span> 5</div>
modelの取得しているHTMLは下記になります。
本当は、span毎に取得してCSVに出力したいですが…うまくいかず、一つのmodelとして取得してきたのですが、
最初のspanの後に改行が入ってしまいます。
html
1<td class="tr-last co-ts-only"> 2<table> 3<tbody><tr> 4<td> 5<span>SD品番:4874875S1</span> 6<span> / メーカー品番:1007802</span> 7</td> 8</tr> 9</tbody></table> 10</td>
2.CP932で出力できない
html = driver.page_source.encode('CP932')
with open('sd.csv', 'a', newline='' , encoding='CP932') as f:
としたり、encording にerrors='ignore' をしたり色々とためしたのですが、
UnicodeEncodeError: 'cp932' codec can't encode character '\u200b' in position 15033: illegal multibyte sequence
がでたり、色々なエンコードエラーがでます。。
まったく太刀打ちができません。。。
素人質問で大変申し訳ございません。。質問の仕方も悪いかと存じますが、何卒ご教示をよろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/07 22:38
2019/02/08 02:39
2019/02/12 22:13