【问题标题】:Scrapy Crawl Expired DomainsScrapy Crawl 过期域名
【发布时间】:2016-03-07 22:07:13
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: python web-scraping scrapy scrapy-spider


    【解决方案1】:

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

    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 响应代码。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 2017-03-19
      • 1970-01-01
      • 2020-01-25
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多