クローラーはとても神秘的だと感じるかもしれませんが、実際には私たちが想像するほど魔法のようなものではありません (もちろん、Google や Baidu のクローラーは複雑で強力です。その力はクローラー自体の強さではなく、背景にあります)データ処理とデータ マイニングのアルゴリズムは非常に強力です)、今日はその謎を明らかにします。笑、Web 天気クローラー プログラムは 2 つの簡単な手順で実装できます。 。 。
簡単に言えば、クローラーは 2 つの部分で構成されます: 1. Web ページのテキスト情報を取得します。 2. 必要なデータを取得するためのデータ分析。
1. Web ページのテキスト情報を取得します。
Python は HTML を取得するのに非常に便利で、urllib ライブラリを利用することで、必要な機能を実現するために必要なコードは数行だけです。
#引入urllib库 import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() page.close() return html
ここで返されるのはWebページのソースコード、つまりHTMLコードです。
それでは、そこから必要な情報をどのように取得するのでしょうか?次に、Web 分析で最も一般的に使用されるツールである正規表現を使用する必要があります。
2. 正規表現などに基づいて必要な内容を取得します。
正規表現を使用する場合は、Web ページ情報の構造を注意深く観察し、正しい正規表現を記述する必要があります。
Python 正規表現の使用も非常に簡単です:
#引入正则表达式库 import re def getWeather(html): reg = '<a title=.*?>(.*?)</a>.*?<span>(.*?)</span>.*?<b>(.*?)</b>' weatherList = re.compile(reg).findall(html) return weatherList
手順:
ここで、reg は正規表現、html は最初のステップで取得したテキストです。 findall の機能は、通常の一致に一致する HTML 内のすべての文字列を検索し、それらを WeatherList に保存することです。次に、weathereList に出力されたデータを列挙します。
ここでの正規表現 reg については、注意すべき点が 2 つあります。
1つは「(.*?)」です。 () 内の内容が取得する内容である限り、複数の括弧がある場合、findall の各結果にはこれらの括弧内の内容が含まれます。上には都市、最低気温、最高気温に対応する 3 つの括弧があります。
もう一つは「.*?」です。 Python の通常のマッチングはデフォルトで貪欲です。つまり、デフォルトで可能な限り多くの文字列と一致します。最後に疑問符を追加すると、非貪欲モード、つまり可能な限り少数の文字列と一致することを意味します。ここでは、照合する必要がある都市が複数あるため、非貪欲モードを使用する必要があります。そうしないと、照合結果が 1 つだけ残り、不正確になります。