【问题标题】:Optimisation Crawler Scrapy优化爬虫 Scrapy
【发布时间】:2016-05-28 06:34:28
【问题描述】:

我正在使用 scrapy 查找过期域,我的爬虫抓取网络并将每个外部域添加到数据库 (MySql),并在我使用 PHP 脚本检查可用性之后。

数据库有大约 300k 域,现在爬虫非常慢,因为我在每次插入之前检查域是否尚未通过此请求进入数据库

insert_table()方法的SQL请求:

sql = "INSERT INTO %s (url) SELECT * FROM (SELECT '%s') AS tmp WHERE NOT EXISTS (SELECT url FROM website WHERE url = '%s' ) LIMIT 1"  % (SQL_TABLE, datas, datas)

爬行者:

class HttpbinSpider(CrawlSpider):

    name = "expired"

    start_urls = [
        'http://mywebsite.com',
    ]

    custom_settings = {
        'RETRY_ENABLED': True,
        'DEPTH_LIMIT' : 0,
        'DEPTH_PRIORITY' : 1,
        'LOG_ENABLED' : False,
        'CONCURRENT_REQUESTS_PER_DOMAIN' : 32,
        'CONCURRENT_REQUESTS' : 64,
    }

    rules = (Rule(LxmlLinkExtractor(allow=()),
            callback='parse_obj',
            follow=True),)

    def parse_obj(self,response):
        item = MyItem()
        item['url'] = []
        for link in LxmlLinkExtractor(allow=('.com', '.fr', '.net', '.org', '.info'),
            deny=('facebook', 'amazon', 'wordpress'),).extract_links(response):   
            ext = tldextract.extract(link.url)
            insert_table(ext.registered_domain)

谁能帮我找到解决方案来获取过期域为什么我的爬虫并保持最佳性能。

谢谢

【问题讨论】:

  • 你的url列有索引吗?
  • 不,我在 url 上没有索引。
  • 鉴于每个查询都会与 url 列进行比较,是否值得添加索引?我原以为这会提高速度。

标签: python sql scrapy web-crawler


【解决方案1】:

您的 sql 查询非常糟糕。 为列 url 添加唯一键并忽略重复项,这将加快插入速度。唯一索引将为您工作。

选择是不必要的。

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 2013-03-29
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多