【发布时间】: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