2013-03-17 36 views
1

我是使用Scrapy的新手,對Python語言知之甚少。到目前爲止,我已經安裝了Scrapy並通過了一些教程。之後,我一直在試圖找到一種方法來搜索許多網站上的相同數據。我的目標是使用簡歷來查找指向「帖子」的鏈接以及一些搜索條件的鏈接。作爲一個例子,我想搜索網站A,B和C.每個網站,我想看看他們是否有關於應用程序名稱X,Y和Z的「發佈」。如果他們有任何「帖子」 X,Y,Z.我希望能夠抓住該帖子的鏈接。如果它會更容易...它可以掃描每個職位的公司名稱。而不是X,Y,Z它會搜索每個「發佈」的內容作爲[示例公司名稱]。我這樣做的原因是,所創建的JSON只有鏈接到「帖子」,以便我們可以查看它們並在需要時聯繫網站。使用Scrapy減少盜版

我在Ubuntu 10.12上,我已經能夠取消我們想要的網站,但我一直無法將JSON縮小到所需的信息。所以目前我們仍然需要經過數百個鏈接,這是我們想通過這樣做避免的。我們得到這麼多鏈接的原因是因爲我發現的所有教程都是爲了獲取特定的HTML標籤。我希望它搜索標籤以查看它是否包含我們的應用標題或包名稱的任何部分。

像這樣,它顯示發佈信息,但現在我們必須從json中挑選鏈接。節省時間,但仍然不是我們想要的。其中一部分,我認爲是我沒有正確引用或調用它。請給我任何幫助,你可以。我花了數小時試圖弄清楚這一點。

posts = hxs.select("//div[@class='post']") 
     items = [] 
     for post in posts: 
      item = ScrapySampleItem() 
      item["title"] = post.select("div[@class='bodytext']/h2/a/text()").extract() 
      item["link"] = post.select("div[@class='bodytext']/h2/a/@href").extract() 
      item["content"] = post.select("div[@class='bodytext']/p/text()").extract() 
      items.append(item) 
     for item in items: 
      yield item 

我想用這個來減少我們Android應用的盜版。如果我可以讓它出去搜索我們想要的盜版網站,我可以通過電子郵件向我們的網站或託管公司發送我們想要刪除的所有鏈接。根據版權法,他們必須遵守,但他們要求我們將他們鏈接到他們侵犯的每個「職位」,這就是爲什麼App開發人員通常不會混淆這類事情。他們有數百個應用程序,因此找到指向您應用程序的鏈接需要花費很多時間。

感謝您提前提供任何幫助。從長遠來看,你將會幫助很多應用程序開發人員!

格雷迪

回答

0

你的XPath選擇是絕對的。他們必須是相對於之前的選擇(在.

posts = hxs.select('//div[@class='post']') 

for post in posts: 
    item = ScrapySampleItem() 
    item['title'] = post.select('.//div[@class="bodytext"]/h2/a/text()').extract() 
    item['link'] = post.select('.//div[@class="bodytext"]/h2/a/@href').extract() 
    item['content'] = post.select('.//div[@class="bodytext"]/p/text()').extract() 

    yield item 
+0

我已刪除的項目[「內容」],因爲我不想要的內容部分。我如何告訴它搜索X,Y和Z?現在,它抓取了body/h2/a中的所有鏈接。 謝謝你讓我更靠近一步並修復我的代碼! – 2013-03-17 14:14:53