Python 优化履带式刮削机
我使用scrapy查找过期的域,我的爬虫爬网并将每个外部域添加到数据库(MySql),然后用PHP脚本检查可用性 数据库有大约300k个域,现在爬虫程序非常慢,因为我在每次插入之前都会检查该域是否还没有通过此请求进入数据库 插入表()方法的SQL请求:Python 优化履带式刮削机,python,sql,scrapy,web-crawler,Python,Sql,Scrapy,Web Crawler,我使用scrapy查找过期的域,我的爬虫爬网并将每个外部域添加到数据库(MySql),然后用PHP脚本检查可用性 数据库有大约300k个域,现在爬虫程序非常慢,因为我在每次插入之前都会检查该域是否还没有通过此请求进入数据库 插入表()方法的SQL请求: sql = "INSERT INTO %s (url) SELECT * FROM (SELECT '%s') AS tmp WHERE NOT EXISTS (SELECT url FROM website WHERE url = '%s' )
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)
有人能帮我找到解决方案,让过期的域名为什么我的爬虫和保持最佳性能
谢谢,您的sql查询非常糟糕。 为列url添加唯一键,并忽略重复项,这将加快插入速度。唯一索引将为您工作
选择是不必要的。您在url列上有索引吗?没有,我在url上没有索引。如果每个查询都与url列进行比较,是否值得添加索引?我本以为这会提高速度。