可能重复:
Python - web crawling
最后一个问题因为“含糊不清”而被关闭。所以我将在这里具体说明:
考虑一下这个网站: http://www.tripadvisor.in/
以及底部的评论, 我需要能够打开审阅者的个人资料,并提取年龄,性别和位置等信息(如果是公开的)。
如何实现这一目标的逐步过程将不胜感激。
PS:这可以使用scrapy吗?
更新:假设我有一个包含用户名称的数据库,我可以直接打开会员的个人资料,例如,对于Lulak
http://www.tripadvisor.in/members/Lulak
如何从此页面中提取年龄,性别和位置
由于
答案 0 :(得分:2)
通过两个个人资料页面,我发现此div包含个人信息
<div id="amd" style="display: block">
并且id
amd未在其他任何地方使用,因此您可以将搜索范围缩小到此特定div。之后,只是搜索相关信息的简单案例。您只需找到<dt>
和<dd>
代码 -
<dt>Location:</dt> <dd>Switzerland</dd>
我认为你可以处理其余的事情。
答案 1 :(得分:1)
是的,Scrapy绝对可以做到这一点。如果您只是打开一个您知道的网址列表而不是抓取网站,我会说Scrapy是过度的。
我建议lxml用于HTML解析,它比BeautifulSoup简单且快得多(可以多达两个数量级)。而requests适用于HTTP,因为它非常简单。
在下面的代码段中,我使用XPath查询来查找正确的定义描述元素。 //dl[dt/text()='term']//dd/text()
基本上是说&#34;找到定义列表(dl)元素,其定义术语的文本内容为&#39; term&#39; (//dl[dt/text()='term']
)然后查找所有定义描述(dd)元素并获取其文本内容(//dd/text()
)&#34;。
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:")