我正在使用Scrapy抓取不同的网站,但实际上我的脚本会跟踪每个网站并将数据库添加到数据库中,然后我使用PHP脚本检查过期的域名。
我希望有人能够帮助我改进我的脚本,因为实际的脚本没有针对我的需求进行优化!
我不知道为什么但是爬虫会立即跳到不同的网站上找到"启动网址",如果脚本在跳转到第一个网站之前完成扫描会更好其他网站。
在将域添加到数据库之前,如何直接检查域是否已过期?
我的抓取工具:
from scrapy.spiders import CrawlSpider, Rule
from dirbot.settings import *
from scrapy.linkextractors.lxmlhtml import LxmlLinkExtractor
from scrapy.item import Item, Field
from urlparse import urlparse
class MyItem(Item):
url= Field()
class someSpider(CrawlSpider):
name = 'expired'
start_urls = ['http://domain.com']
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/i',deny = '/.jp|facebook|amazon|wordpress|blogspot|free.|google|yahoo|bing|znet|stackexchange|twitter|wikipedia/i').extract_links(response):
parsed_uri = urlparse(link.url)
url = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
insert_table(url)
答案 0 :(得分:2)
在您的代码中,您可以按如下方式检查响应代码:
class someSpider(CrawlSpider):
name = 'expired'
start_urls = ['http://domain.com']
rules = (Rule(LxmlLinkExtractor(allow=()), callback='parse_obj', follow=True),)
def parse_obj(self,response):
item = MyItem()
item['url'] = []
if response.status == 404:
# Do if not available
pass
elif response.status == 200:
# Do if OK
insert_table(url)
for link in LxmlLinkExtractor(allow='/.com|.fr|.net|.org|.info/i',deny = '/.jp|facebook|amazon|wordpress|blogspot|free.|google|yahoo|bing|znet|stackexchange|twitter|wikipedia/i').extract_links(response):
parsed_uri = urlparse(link.url)
url = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
elif response.status == 500:
# Do if server crash
pass
我添加了解析网站链接的代码,以防网站初始请求为您提供http 200 OK响应代码。
我希望它有所帮助。