是的,这完全可以使用 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:")