2012-12-28 163 views
2

可能重复:
Python - web crawling蟒蛇网页抓取

,因为它是 “暧昧” 最后一个问题被关闭。所以我会尽量具体位置:

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

,并在底部给出的评价, 我需要能够打开评论者的个人资料,并提取信息等年龄,性别和地点,如果它是公开的。

如何实现这一点的分步过程将不胜感激。

PS:这是可以使用scrapy吗?

UPDATE:假设我有用户的姓名的数据库,我可以直接打开该成员的个人资料,例如,对于Lulak

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

我如何提取的年龄,性别,位置,距离此页面

感谢

+0

采取联合看看机械化(http://wwwsearch.sourceforge.net/mechanize/)与beautifulsoup(http://www.crummy.com/software/BeautifulSoup/)。可能是scrapy的替代品 – dvcrn

+1

这是可以使用scrapy。查看这里的文档http://doc.scrapy.org/en/latest/intro/overview.html – Ifthikhan

+2

机械化和scrapy都有相当直接的教程。如果您遇到困难,请尝试先完成这些工作并发布问题。 – Talvalin

回答

2

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

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

而且id amd没有用在任何其他地方,所以你可以缩小搜索范围到这个特定的div。之后,这只是搜索相关信息的简单情况。你只需要找到<dt><dd>标签 -

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

我认为你可以处理剩下的。

+0

非常感谢。正是我在找什么! –

1

是的,这是绝对有可能与Scrapy。如果你只是打开你知道的网址列表而不是抓取网站,那么我会说Scrapy太过分了。

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

在下面的代码片段中,我使用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:")