実現したいこと
google app script でcheerio,parserライブラリを使いスクレイピングをします
https://www.linguee.com/english-spanish/search?source=spanish&query=ser
このサイトで品詞と意味をリストに格納します。
meaning=[ [ 'verb', [ 'be', 'constitute sth.' ] ], [ 'noun, masculine', [ 'being', 'self', 'creature' ] ] ]
meaning=[ [ '品詞1', [ '意味1', '意味2',... ] ], [ '品詞2', [ '意味1', '意味2', '意味3', .... ] ] ]
となるのが目標です。
pythonで書いたコードは思った通りに動作しましたが、google app script用に書き換えたコードは一部(?)思った通りに動きませんでした
前提
pythonで作ったコードをgoogle app scriptで動作するように書き換えました。
ほぼ思った通りに動くんですが、試しにやってみた"ser"という単語のページでは、
2個目の意味の constitute sth.
が取得できませんでした。他の試したものではもれなく値を取得できました。
おかしいなあと思ってgoogleapp scriptで実行をクリックしまくっていたら、一度だけ2個目の意味の constitute sthを取得できましたがそれ以降は取得できないままです。実行するタイミングで結果が変わることがあったりするんでしょうか。見間違いではなかったと思うのですが、、、
どこが問題なのでしょうか
よろしくお願いします
他に確認した単語です
https://www.linguee.com/english-spanish/search?source=auto&query=pensar
https://www.linguee.com/english-spanish/search?source=spanish&query=que
該当のソースコード
javascript
1function scrapeWebsite() { 2 const verb = "ser"; 3 const url = 'https://www.linguee.com/english-spanish/search?source=spanish&query=' + verb; 4 const response = UrlFetchApp.fetch(url); 5 const html = response.getContentText(); 6 const $ = Cheerio.load(html); 7 8 const divs = $('div.lemma.featured'); 9 const spans = []; 10 const meaning = []; 11 12 divs.each((i, div) => { 13 const span = []; 14 span.push($(div).find('span.tag_wordtype').text()); 15 const tagTrans = $(div).find('span.tag_trans'); 16 const spanNew = []; 17 tagTrans.each((j, tag) => { 18 spanNew.push($(tag).find('a').text()); 19 }); 20 span.push(spanNew); 21 spans.push(span); 22 }); 23 24 for (const span of spans) { 25 const spanNew = []; 26 for (const tag of span[1]) { 27 spanNew.push(tag); 28 } 29 span[1] = spanNew; 30 meaning.push(span); 31 } 32 33 console.log(meaning); 34} 35
python
1verb="ser" 2url='https://www.linguee.com/english-spanish/search?source=spanish&query={}'.format(verb) 3res=requests.get(url) 4soup=BeautifulSoup(res.text,'html.parser') 5divs=soup.find_all('div',class_='lemma featured') 6spans=[] 7meaning=[] 8 9for div in divs: 10 span=[] 11 span.append(div.find('span', class_='tag_wordtype').get_text()) 12 span.append(div.find_all('span', class_='tag_trans')) 13 spans.append(span) 14#spans=[span,span,...] 15#span=["品詞",["<span tag><a tag></span>","<span tag><a tag></span>",...]] 16for span in spans: 17 spanNew=[] 18 for tag in span.pop(1): 19 spanNew.append(tag.find('a').get_text()) 20 span.append(spanNew) 21 meaning.append(span) 22print(meaning)

回答2件
あなたの回答
tips
プレビュー