2012-12-28 161 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:")