KATUBLO
2019年02月09日

「Only numeric values are currently supported for the nth-of-type pseudo-class. 」のエラーの解決方法

ゴール

Only numeric values are currently supported for the nth-of-type pseudo-class. 」のエラーの解決方法を知る。

 

どのような場面でエラーが起きた?

pythonの「Beautifullsoup」を使用して、とあるwebサイトの値を自動取得するプログラムを作成していました。その中でCSS selector でパスを指定して、ある値を取得するコードを以下のように書きました。

 

soup.select("#oddsField > table > tbody > tr:nth-of-type(even) > th")

 

この処理を実行したときに返ってきたエラーがこちら

 

「invalid literal for int() with base 10: ‘even’」

 

日本語訳をすると、「’even’は基数10をもつint型には不正なリテラルです。」

 

リテラルとは?

プログラミングに置けるリテラルは以下のように定義できるそうです。

 

「リテラルとは、プログラムのソースコードにおいて使用される、数値や文字列を直接に記述した定数のことである。変数の対義語であり、変更されないことを前提とした値である。」

 

出典: 『Weblio辞典』

 

 

ぐぐった結果

staticoverflowにて答えらしき記事が見つかりました。

 

Officially, Beautifulsoup doesn’t support all the CSS selectors.
If python is not the only choice, i strongly recommend JSoup (the java equivalent of this). It supports all the CSS selectors.

* It is open source (MIT license)
* Syntax is easy
* Supports all the css selectors
* Can span multiple threads too to scale up
* Rich API support in java to store in DBs. So, it is easy to integrate.

The other alternate way if you still want to stick with python, make it a jython implementation.

 

Beautifulsoup は全てのCSSセレクタの形式に対応していない

回答を見る限り、Beautifulsoup は全てのCSSセレクタの形式に対応していないとのことです。

 

スクレイピングはJAVAのJSoupを使おう

スクレイピングにおいて、どうやらJAVAの「JSoup」というライブラリが最強のようです。

 

自分はどのように対応した?

私は他の部分でも同じ値が取得できたので、そちらを指定して無事取りたい値を取得することができました。エラーがでると真っ先にそれを直すことだけに走りがちですが、エラーを修正するより、他のやりかたを考えたほうが楽なパターンもあります。ですのでエラーを修正するのが難しいとき、「今、行いたい処理はなにか?」ということに一度振り返るのが大切だとおもいます。

 

 

参考サイト

最後まで読んで頂き
ありがとうございました。
SNS等でのシェアが頂ければ幸いです。

プロフィール

@KATUO

現在都内私立大学に通う大学3年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習をスタート。この時期からプログラミングにどハマりし、現在までに「AIスタートアップ」「Webマーケティング会社」でエンジニアとしての業務に没頭してきた。

過去の投稿