2

重複の可能性:
Python-Webクロール

最後の質問は「あいまい」だったので締めくくられました。だから私はここで具体的にしようとします:

このウェブサイトを検討してください:http: //www.tripadvisor.in/

下部にあるレビューでは、レビュー担当者のプロフィールを開き、公開されている場合は年齢、性別、場所などの情報を抽出できる必要があります。

これを達成する方法についての段階的なプロセスをいただければ幸いです。

PS:これはscrapyを使用して実行できますか?

更新:ユーザーの名前が記載されたデータベースがあり、たとえばLulakのメンバーのプロファイルを直接開くことができると仮定します。

http://www.tripadvisor.in/members/Lulak

このページから年齢、性別、場所を抽出するにはどうすればよいですか

ありがとう

4

2 に答える 2

2

2 つのプロファイル ページを調べたところ、この div に個人情報が含まれていることがわかりました。

<div id="amd" style="display: block">

また、idamd は他の場所では使用されていないため、検索をこの特定の div に絞り込むことができます。後は、関連情報を検索するだけの簡単なケースです。<dt><dd>タグを見つけるだけです-

<dt>Location:</dt> <dd>Switzerland</dd>

残りはあなたが処理できると思います。

于 2012-12-28T11:18:37.297 に答える
1

はい、これは Scrapy で絶対に可能です。サイトをスクレイピングするのではなく、知っている URL のリストを開くだけなら、Scrapy はやり過ぎだと思います。

HTML の解析にはlxmlをお勧めします。これはシンプルで、BeautifulSoup よりもかなり高速です (2 桁もかかる可能性があります)。HTTPのリクエストは非常にシンプルです。

以下のスニペットでは、XPath クエリを使用して正しい定義記述要素を見つけています。//dl[dt/text()='term']//dd/text()本質的には、「「用語」のテキストコンテンツを持つ定義用語を持つ定義リスト(dl)要素を//dl[dt/text()='term']見つけて( )、次にすべての定義記述(dd)要素を見つけて、それらのテキストコンテンツを取得する(//dd/text())」と言っています。

from StringIO import StringIO
import requests
from lxml import etree

response = requests.get("http://www.tripadvisor.in/members/SomersetKeithers")

parser = etree.HTMLParser()
tree   = etree.parse(StringIO(response.text), parser)

def get_definition_description(tree, term):
  description = tree.xpath("//dl[dt/text()='%s']//dd/text()" % term)
  if len(description):
    return description[0].strip()

print get_definition_description(tree, "Age:")
print get_definition_description(tree, "Gender:")
print get_definition_description(tree, "Location:")
于 2012-12-28T12:35:15.787 に答える