2

可能重复:
Python - 网络爬虫

最后一个问题因为“模棱两可”而被关闭。所以我会在这里具体说明:

考虑这个网站: http ://www.tripadvisor.in/

以及底部给出的评论,我需要能够打开评论者的个人资料,并提取年龄、性别和位置等信息(如果是公开的)。

将不胜感激有关如何实现此目标的分步过程。

PS:这可以使用scrapy吗?

更新:假设我有一个包含用户名的数据库,并且我可以直接打开会员的个人资料,例如 Lulak

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

如何从此页面中提取年龄、性别和位置

谢谢

4

2 回答 2

2

通过他们的两个个人资料页面,我发现这个 div 包含个人信息

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

amd 不用于其他id任何地方,因此您可以将搜索范围缩小到这个特定的 div。之后,只是一个简单的搜索相关信息的案例。你只需要找到<dt><dd>标签 -

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

我想你可以处理剩下的。

于 2012-12-28T11:18:37.297 回答
1

是的,这完全可以使用 Scrapy。如果您只是打开一个您知道的 URL 列表而不是抓取该站点,我会说 Scrapy 是矫枉过正。

我会推荐lxml用于 HTML 解析,它比 BeautifulSoup 简单且快得多(可以多达两个数量级)。以及对 HTTP 的请求,因为它非常简单。

在下面的片段中,我使用 XPath 查询来查找正确的定义描述元素。//dl[dt/text()='term']//dd/text()本质上是说“找到定义术语的定义列表(dl)元素,其文本内容为'term'(//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 回答