Scrapy爬取过期域名

3

我正在使用Scrapy爬取不同的网站,但实际上我的脚本会跟随每个网站并将域名添加到数据库中,之后我会使用PHP脚本检查过期的域名。

我希望有人能够帮助我改进我的脚本,因为现有的脚本不适合我的需求!

我不知道为什么,但爬虫会立即跳转到“start url”上找到的不同网站,如果脚本在跳转到另一个网站之前完成了对第一个网站的扫描,那将更好。

如何直接检查域名是否过期,然后再将其添加到数据库中?

我的爬虫:

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)
1个回答

3

在你的代码中,你可以如下检查响应码:

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响应代码,我添加了解析网站链接的代码。

希望它会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接