2013-08-01 166 views
0

我試圖避免刮相同的信息不止一次,我每天早上運行這個蜘蛛刮工作董事會的工作,然後我複製他們到Excel中,並按列表中刪除重複使用URL。我想在scrapy中做到這一點(我可以將txt文件更改爲csv)。我會很樂意來實現中間件scrapy重複過濾器與csv文件

這是我嘗試使用

class CraigslistSamplePipeline(object): 



    def find_row_by_id(item): 
     with open('URLlog.txt', 'r') as f:    # open my txt file with urls from previous scrapes 
      urlx = [url.strip() for url in f.readlines()] # extract each url 
      if urlx == item ["website_url"]:    # compare old url to URL being scraped 
      raise DropItem('Item already in db')  # skip record if in url list 
     return 

我敢肯定,這個代碼是錯誤的pipleing,可以有人請建議我怎麼能做到這一點,林很新的這樣解釋每一行會幫助我很多。我希望我的問題是有道理的,有人可以幫我

香港專業教育學院看着這些帖子求助,但沒能解決我的問題:

How to Filter from CSV file using Python Script

Scrapy - Spider crawls duplicate urls

how to filter duplicate requests based on url in scrapy

+0

你是說'urlx'在從文件中讀取後包含重複項嗎? –

+1

不,這個代碼不起作用,我根本沒有寫入urlx,urlx只是從URLlog.txt文件中獲取它,並且我在抓取完成後手動添加URL到URLlog.txt – user2636623

+0

哦,我想我現在明白了。 –

回答

0

使用in關鍵字。像這樣:

if item['website_url'] in urlx: 
     raise DropItem('Item already in db') 

您從一個文件,其中每一行是一個URL加載urlx。它現在是一個列表。 in關鍵字檢查以查看網站網址是否在列表urlx中。如果是,則返回true。請記住,在我的示例中,比較是區分大小寫的。您可能需要在網站網址和從文件加載的網址上撥打.lower()

有這樣做的更有效的方法,但我認爲你只是想要的東西有效。

+0

感謝埃裏克,我很興奮得到這個工作。如果你知道更有效的方法來做到這一點,我很樂意聽到,整個scrapy項目一直是我從互聯網上覆制和粘貼代碼,所以我對最佳實踐和最有效的方法做事的知識非常有限 – user2636623