2013-08-01 72 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