Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一个论坛抓取数据_Python_Scrapy_Web Crawler - Fatal编程技术网

Python 从一个论坛抓取数据

Python 从一个论坛抓取数据,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,我是个新手。 我想从一个论坛抓取所有帖子,并更新这些新帖子。 我想弄清楚一些问题 1.如何确保爬虫不会两次抓取a帖子 2.如果有某种机制可以避免两次爬行帖子。即使我重新启动爬虫程序,这个机制也能工作吗 3.爬虫会自动爬网新帖子吗 4.我需要在这个项目中使用什么db/插件 下面是spider类的初始化 name = "forum" allowed_domains = ["forum.com"] start_urls = ( 'http://s7.forum.com/

我是个新手。 我想从一个论坛抓取所有帖子,并更新这些新帖子。 我想弄清楚一些问题

1.如何确保爬虫不会两次抓取a帖子

2.如果有某种机制可以避免两次爬行帖子。即使我重新启动爬虫程序,这个机制也能工作吗

3.爬虫会自动爬网新帖子吗

4.我需要在这个项目中使用什么db/插件

下面是spider类的初始化

name = "forum"
    allowed_domains = ["forum.com"]
    start_urls = (
        'http://s7.forum.com/posts.aspx',
    )

    rules = [
        Rule(LinkExtractor(allow=('mid=', )), callback='parse_item'),
    ]
  • 您需要自己自定义一个机制,并将其放入设置中。像这样:
  • 从scrapy.dupefilter导入RFPDupeFilter

    类SeenURLFilter(RFPDupeFilter):

    确保将DUPEFILTER_类常量添加到settings.py:

    DUPEFILTER_CLASS = 'scraper.custom_filters.SeenURLFilter'
    
  • 对。只要爬行还在运行,它就会工作
  • 我看不出这里有什么困难。使用您熟悉的任何数据库

  • 谢谢,但是如果我重新启动爬虫呢?RFPDupeFilter能否与DB一起过滤重复记录???@SiuChungChan我认为您应该在DB中查找记录,以查看它是否重复。这个过滤器不适合你。谢谢,但是让它成为通用的,每次只检查db中的记录是否更好?否则,我需要检查使用过滤器和数据库,只要我重新启动爬虫。还是使用RFPdupeFilter还有一些好处?@SiuChungChan我认为这取决于您的需求和实际环境。如果数据库中的数据不多,可以将所有数据读取到内存中,并与SeenURLFilter进行比较。如果数据库中的数据太多,每次都必须检查数据库中的记录。我认为找到一种有效的方法将URL存储在数据库中,并将所有URL读取出来进行比较是最好的解决方案。
    DUPEFILTER_CLASS = 'scraper.custom_filters.SeenURLFilter'