scrapy抓取所有网站域名

需求分析

从一个门户网站出发,试图爬取该门户网站所有链接,如此递归下去,发现新域名则保存起来,每个域名网站只爬取一次。有了这些数据在通过外部DNS获得IP,就可以自己搭建DNS服务器了

创建项目

创建一个项目,名叫crawl_all_domainname

scrapy startproject crawl_all_domainname

创建爬虫较本domain.py, 从han123.com开始爬行

cd crawl_all_domainname/crawl_all_domainname
crawl_all_domainname>scrapy genspider domain hao123.com  

修改配置文件,忽略robots.txt

ROBOTSTXT_OBEY = False

代码实现

# -*- coding: utf-8 -*-
import scrapy
from urllib import parse
import re

already_crawl_dn=[]
class DomainSpider(scrapy.Spider):
    name = ‘domain‘
    start_urls = [‘http://hao123.com/‘]

    def parse(self, response):

        #将已爬取的域名存入列表already_crawl
        domain = parse.urlparse(response._url).netloc.lstrip(‘www.‘)
        already_crawl_dn.append(domain)
        print(‘Crawl %s Done‘ % domain)

        #1.提取html页面中所有a标签中的href属性
        #2.提取有效url(http://www...或https://www...)
        #3.将url转化为域名,在用set去重
        dns = set([parse.urlparse(url).netloc.lstrip(‘www.‘) for url in response.css(‘a::attr(href)‘).getall() if re.fullmatch(‘(https|http)://www.*‘, url)])

        #4.提取urls中没有爬取过的url,
        dns = [dn for dn in dns if dn not in already_crawl_dn]

        #将新发现未爬取的域名交给蜘蛛
        for dn in dns:
            yield scrapy.Request("https://www." + dn, callback=self.parse)

    def close(spider, reason):
        print(already_crawl_dn)

现在已经可以抓取域名了,目前有个问题是这些域名存在列表(内存)中,随着程序运行内存会慢慢被占满。我没找的最新的全球域名数统计,但找到了:

截至2015年6月,中国域名总数为2231万个,其中“.CN”域名总数为1225万个,占中国域名总数比例为54.9%,“.中国”域名总数为26万个

假设目前全球域名总数1亿个,每个域名长度10个字符(统计了100个域名的平均长度)

查看1亿个域名所占用内存

In [147]: domainNames = [‘xxxxxx.com‘] * 100000000

In [148]: import sys

In [149]: sys.getsizeof(domainNames) / 1024 / 1024
Out[149]: 762.9395141601562

占用了762M,以现在电脑配置绰绰有余了,在看看所需时间

抓取每个域名的平均实际1s(统计了100个域名的平均时间),1亿个需要4年。即使全球目前真的有1亿个域名,这个程序也不能将他们全部找到,因为为了节约时间我没有访问所有网页,

每个域名网站只访问了一次(只访问了主页)。

原文地址:https://www.cnblogs.com/plyonfly/p/11456676.html

时间: 2024-10-10 12:27:40

scrapy抓取所有网站域名的相关文章

scrapy抓取某些网站出现AttributeError_ object has no attribute 的解决办法的代码.txt

把写内容过程中经常用的内容段备份一下,下面的内容内容是关于scrapy抓取某些网站出现AttributeError: 'Response' object has no attribute 'body_as_unicode'的解决办法的内容,应该是对码农们也有用. def parse(self, response): hxs=Selector(response) for url in detail_url_list: if 'goods' in url: yield Request(url, ca

Scrapy抓取360网站图片

项目名称:抓取360网站图片 目标url:http://image.so.com 项目描述:利用Scrapy的ImagePipeline抓取360网站的图片 要利用Scrapy抓取图片,第一步还是先定义item 1 # -*-coding: utf-8 -*- 2 import scrapy 3 4 class ImageItem(scrapy.Item): 5 image_urls = scrapy.Field() 第二步是在settings.py中打开ImagePipeline,然后定义一下

分布式爬虫:使用Scrapy抓取数据

分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自

scrapy抓取的页面中文会变成unicode字符串

不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html 现象:从scrapy抓取的页面中文会变成unicode字符串,如下图 2017-03-28 23:00:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.lagou.com/jobs/2617468.html> {'describe': [u'<div>\n <p>\u5c97\u

Java爬虫实战(一):抓取一个网站上的全部链接

前言:写这篇文章之前,主要是我看了几篇类似的爬虫写法,有的是用的队列来写,感觉不是很直观,还有的只有一个请求然后进行页面解析,根本就没有自动爬起来这也叫爬虫?因此我结合自己的思路写了一下简单的爬虫,测试用例就是自动抓取我的博客网站(http://www.zifangsky.cn)的所有链接. 一 算法简介 程序在思路上采用了广度优先算法,对未遍历过的链接逐次发起GET请求,然后对返回来的页面用正则表达式进行解析,取出其中未被发现的新链接,加入集合中,待下一次循环时遍历. 具体实现上使用了Map<

scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立

本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visual studio一劳永逸,如果报错缺少前置依赖,就先安装依赖) 本篇主要对scrapy生成爬虫项目做一个基本的介绍 tips:在任意目录打开cmd的方式可以使用下面这两种方式 shift + 右键打开cmd(window10的powershell你可以简单理解为cmd升级版) 在路径框直接输入cmd

【1.1】Scrapy抓取4步走、新建项目

Scrapy抓取4步走 新建项目 明确目标 制作爬虫 存储内容 scrapy startproject 项目名 scrapy genspider 文件名 域名 scrapy.cfg 原文地址:https://www.cnblogs.com/zydeboke/p/11619751.html

nutch2.1抓取中文网站

对nutch添加中文网站抓取功能. 1.中文网页抓取 A.调整mysql配置,避免存入mysql的中文出现乱码.修改 ${APACHE_NUTCH_HOME} /runtime/local/conf/gora.properties ############################### # MySQL properties            # ############################### gora.sqlstore.jdbc.driver=com.mysql.jd

asp.net如何抓取其他网站的内容

1. 需要引用的类库 using System.Net; using System.IO; using System.Text; using System.Text.RegularExpressions; 2. 获取其他网站网页内容的关键代码 WebRequest request = WebRequest.Create("http://目标网址.com/"); WebResponse response = request.GetResponse(); StreamReader read