1

Web サイトをスクレイピングするスクリプトを作成しようとしており、これを使用しています (http://www.theericwang.com/scripts/eBayRead.py)。

ただし、ebay 以外のサイトをクロールしたり、自分のニーズに合わせてカスタマイズしたりするために使用したいと考えています。

私はPythonにかなり慣れていないため、経験が限られています。

この行が何を達成するかはわかりません。

for url, title in re.findall(r'href="([^"]+).*class="vip" title=\'([^\']+)', lines):

誰かが私にいくつかの指針を教えてもらえますか?

これを他のサイトに移植する場合、他に考慮すべきことはありますか?

4

3 に答える 3

3

一般に、HTML の解析は、BeautifulSoup などのライブラリを使用して行うのが最適です。このライブラリは実質的にすべての面倒な作業を処理し、より直感的なコードを作成します。また、以下の@Tadeckのリンクを読んでください-回避できる場合は、正規表現とHTMLを混在させないでください(軽く言えば)。

あなたの質問に関しては、その行は「正規表現」と呼ばれるものを使用して、テキスト (この場合は HTML) 内の一致するパターンを見つけます。re.findall()はリストを返すメソッドなので、それだけに注目すると:

re.findall(r'href="([^"]+).*class="vip" title=\'([^\']+)', lines):

rこれは、バックスラッシュなどの文字が文字どおりに解釈されることを意味します。

href="([^"]+)

括弧はグループ (一致で何を気にするか) を示し、[^"]+「引用符以外のすべてに一致する」という意味です。ご想像のとおり、このグループはリンクの URL を返します。

.*class="vip"

.*、何にでも (ほとんど何にでも) 0 回以上一致します (ここには、他のタグ、リンクの終了引用符、空白などが含まれる可能性があります)。特別なclass="vip"ことは何もありません - 表示する必要があるだけです。

title=\'([^\']+)', lines):

ここでは、エスケープされた引用符と、上で見た別のグループが表示されます。今回は、titleタグの後の 2 つのアポストロフィの間にあるものをキャプチャしています。

この最終結果は、すべての一致のリストを繰り返し処理していることです。これらの一致は のよう(my_matched_link, my_matched_title)になり、 に渡されfor url, title、その後さらに処理が行われます。

于 2012-11-15T05:08:09.863 に答える
3

これがあなたの質問に答えるかどうかはわかりません。しかし、さまざまな Web サイトをクロールするために、scrapyを検討できます: http://scrapy.org 。多くの柔軟性を提供し、特定のニーズに合わせて簡単にカスタマイズできる優れたインフラストラクチャです。

于 2012-11-15T04:45:31.553 に答える
2

正規表現は HTML の解析には適していません

上記は、私があなたに伝えたい主な考えです。理由については、次の質問を参照してください: RegEx match open tags except XHTML self-contained tags .

つまり、HTML はテキストとして変更できます (たとえば、新しい属性を追加したり、属性の順序を変更したり、その他の変更を導入したりすることができます)、Web ブラウザーによって解釈されるのとまったく同じ HTML になります。スクリプトを完全に壊します。

HTML は、専用の HTML パーサーまたは Web スクレイパーを使用して解析する必要があります。それが重要になると、彼らは違いを知っています。

スクレイピングには何を使用しますか?

複数のソリューションがありますが、最も注目すべきソリューションの 1 つはScraPyです。試してみてください、あなたはそれを好きになるかもしれません。

于 2012-11-15T05:14:28.260 に答える