我已經設置了一個聚集所有出站鏈接(從start_urls
僅通過例如DEPTH_LIMIT = 2
爬取一定深度)的CrawlSpider。使用Scrapy抓取多個域名而沒有十字交叉
class LinkNetworkSpider(CrawlSpider):
name = "network"
allowed_domains = ["exampleA.com"]
start_urls = ["http://www.exampleA.com"]
rules = (Rule(SgmlLinkExtractor(allow=()), callback='parse_item', follow=True),)
def parse_start_url(self, response):
return self.parse_item(response)
def parse_item(self, response):
hxs = HtmlXPathSelector(response)
links = hxs.select('//a/@href').extract()
outgoing_links = []
for link in links:
if ("http://" in link):
base_url = urlparse(link).hostname
base_url = base_url.split(':')[0] # drop ports
base_url = '.'.join(base_url.split('.')[-2:]) # remove subdomains
url_hit = sum(1 for i in self.allowed_domains if base_url not in i)
if url_hit != 0:
outgoing_links.append(link)
if outgoing_links:
item = LinkNetworkItem()
item['internal_site'] = response.url
item['out_links'] = outgoing_links
return [item]
else:
return None
我想將其擴展到多個域(exampleA.com,exampleB.com,exampleC.com ...)。起初,我以爲我可以在我的名單只是添加到start_urls
以及allowed_domains
但在我看來,這將導致以下問題:
- 會將設置
DEPTH_LIMIT
應用於每個start_urls
/allowed_domain
? - 更重要的是:如果網站連接,蜘蛛會從exampleA.com跳轉到exampleB.com,因爲它們都在allowed_domains中?我需要避免這種縱橫交錯的情況,因爲我後來想要統計每個站點的出站鏈接,以獲取有關這些網站之間關係的信息!
所以,我怎麼能規模更沒有運行到縱橫交錯的問題,並使用每個網站的設置蜘蛛?
其他圖像顯示我想實現什麼:
那麼在'scrapy'中,如果你傳遞了一個start_url和一個allowed_domain,就已經實現了。我想知道可以輕鬆擴展它。 – bioslime