`
ipython
  • 浏览: 293453 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

简单的crawler,python

阅读更多

以下是十分简单的python写的爬虫小脚本。

import os,re
import urlparse,urllib,urllib2
import hashlib,Queue

class Request(object):
    def __init__(self):
        self.url= ''
        self.error_url = []
        self.undownload_url = []
        self.downloaded_url = []
        self.headers={'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6)  \
                       Gecko/20091201 Firefox/3.5.6',
                      'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
                      }

    def read_url_from_file(self):
        urls = []
        try:
            r = open('urls.txt','r')
            urls = r.readlines()
            r.close()
        except IOError:
            url = raw_input("no file urls.txt,please input a url >>> ")
            if not url.lower().startswith('http://'):
                url = 'http://'+url
            urls.append(url)
        return urls


    def is_download_url(self):
        return self.url in self.downloaded_url

    def get(self):
        ok = False
        req = urllib2.Request(self.url,None,self.headers)
        for i in range(3):
                temp = urllib2.urlopen(req)
                if temp.getcode()==200:
                    if 'content-type' in temp.headers.keys(): 
                        content_type = temp.headers.get('content-type')
                        if 'text' in content_type:
                            return temp.read()
                    else:
                        return temp.read()
        return ''
 
    def find_links(self):
        com = re.compile(r"""<a[^>]*?href\s*=\s*['"]?([^'"\s>]{1,500})['">\s]""",re.I|re.M|re.S)
        links = com.findall(self.content)
        links = set(links)
        links = list(links)
        full_links = [urlparse.urljoin(self.url,x) for x in links]
        for i in full_links:
            if i not in self.undownload_url and i not in self.downloaded_url:
                self.undownload_url.append(i)

    def save_page(self,page_source,filename):
        dirname = filename.split('/')[0]
        if not os.path.isdir(dirname):
            os.mkdir(dirname)
        w = open(filename,'w')
        w.write(page_source)
        w.close()
              
    def save_result(self,urls,filename):
        w = open(filename,'w')
        w.write('\n'.join(urls))
        w.close()

    def run(self):
        self.page = 0
        self.ldir = 0
        self.num_per_dir = 100
        self.undownload_url = self.read_url_from_file()
        self.url_to_path = {}
        try:
            while self.undownload_url:
                self.url = self.undownload_url.pop(0)
                self.url = self.url.replace('\n','')
                order = self.page+self.ldir*self.num_per_dir
                print (" %4d download... %s " % (order,self.url) )
                self.content = self.get()
                self.downloaded_url.append(self.url)
                if self.content:
                    self.find_links()
                    filename = str(self.ldir)+'/'+str(self.page)
                    self.save_page(self.content,filename)
                    self.url_to_path[str(order)] = self.url
                    self.page += 1
                    if self.page >= self.num_per_dir:
                        self.page -= self.num_per_dir
                        self.ldir += 1
                else:
                    self.error_url.append(self.url)
            print ("finished !")     
            
        except:
            print ("save downloaded urls into downloaded file")
            self.save_result(self.downloaded_url,'downloaded')
            print ("save error urls into error file")
            self.save_result(self.undownload_url,'undownload')
            print ("save url to file dictonary into url_to_file")
            self.save_result([x+'\t'+self.url_to_path[x] for x in self.url_to_path.keys()],'url_to_file')
            print ("total try to download %d urls" % order)
 
aa = Request()
aa.run()
 
0
2
分享到:
评论

相关推荐

    crawler_webcrawler_python_parallel_

    在IT行业中,网络爬虫(Web Crawler)是一种自动化程序,用于从互联网上抓取大量数据,而Python作为一门强大的编程语言,因其简洁易用的特性,在爬虫领域被广泛应用。"crawler_webcrawler_python_parallel_"这个标题...

    Python爬虫示例之distribute-crawler-master.zip

    Python爬虫示例之distribute_crawler-master.Python爬虫示例之distribute_crawler-master.Python爬虫示例之distribute_crawler-master.Python爬虫示例之distribute_crawler-master.Python爬虫示例之distribute_...

    crawlerforSinaweibo_爬虫python_webcrawler_python_weibo_python爬虫_

    1. "爬虫python":表明这个项目涉及Python语言编写爬虫,Python是目前非常流行的爬虫开发语言,因为其语法简洁,且有强大的网络请求和数据处理库。 2. "webcrawler":这是“网络爬虫”的英文,指的是自动遍历互联网...

    PythonCrawler-master_网络爬虫最新教程_python_

    本教程"PythonCrawler-master"旨在教授如何利用Python进行网页数据的抓取和处理。教程涵盖了网络爬虫的基础知识,包括HTML解析、HTTP请求、数据存储等核心内容,同时也涉及了一些高级技巧,如模拟登录、反爬虫策略和...

    python-crawler-python爬虫

    学习 Python 爬虫需要掌握以下几个方面的知识:首先,需要了解 Python 基础知识,包括变量、数据类型、控制结构、函数、模块等。 Python 是一种易于学习的语言,对于初学者来说,学习 Python 基础知识并不困难。其次...

    crawlerforSinaweibo_爬虫python_webcrawler_python_weibo_python爬虫_源码

    【标题】:“crawlerforSinaweibo_爬虫python_webcrawler_python_weibo_python爬虫_源码” 这个标题明确指出这是一个关于Python爬虫的项目,特别针对的是新浪微博(Sina Weibo)的数据抓取。"Webcrawler"是网络爬虫...

    500lines之crawler爬虫(python3.7改进版)

    "500lines之crawler爬虫(python3.7改进版)"项目旨在提供一个适应Python3.7环境的爬虫解决方案。原始版本可能由于Python版本升级导致的API变化而无法正常工作,但经过改进后,此项目能在Windows 7系统上,搭配...

    python-video-crawler.rar_Python 视频_python_python 视频_python vid

    在这个"python-video-crawler.rar"压缩包中,包含的是一个Python实现的视频采集项目,它可以帮助我们从国内几个知名的视频站点抓取相关的视频信息。这个工具对于数据分析、内容监控或者研究网络视频趋势的开发者来说...

    Python-Crawler-master_爬虫_python爬虫_

    Python-Crawler-master是一个关于Python爬虫的项目,主要利用Python的多线程技术来实现对电影天堂网站资源的高效抓取。在这个项目中,开发者旨在提供一个实用且高效的爬虫框架,帮助用户获取到电影天堂网站上的丰富...

    Python库 | spidy_web_crawler-1.6.0-py3-none-any.whl

    python库。 资源全名:spidy_web_crawler-1.6.0-py3-none-any.whl

    Python库 | spidy_web_crawler-1.6.5-py3-none-any.whl

    **Python库 | spidy_web_crawler-1.6.5-py3-none-any.whl** 在IT领域,Python是一种广泛使用的编程语言,以其简洁、易读的语法和强大的库支持而受到开发者的喜爱。`spidy_web_crawler`是Python生态系统中的一个库,...

    weibo_crawler-master-python.rar

    【标题】"weibo_crawler-master-python.rar" 提供的是一个使用Python编写的微博爬虫项目的源代码。这个项目主要用于抓取和分析新浪微博的数据,它可能是由开发者或数据分析人员为了研究社交媒体趋势、用户行为或者...

    Python website crawler..zip

    Python website crawler.

    Python distributed crawler tutorial(Python分布式爬虫)

    Python分布式爬虫是一种通过在多台机器或多个进程间共享爬取任务来提高数据采集效率的方法。对于需要抓取海量网页或处理大规模数据的项目,分布式爬虫能够极大地缩短采集时间。通过使用Scrapy、Scrapy-Redis和Redis...

    python 编写的DHT Crawler 网络爬虫

    python 编写的DHT Crawler 网络爬虫,抓取DHT网络的磁力链接。 文件 collector.py dht网络爬虫脚本 抓取dht网络的磁力链接,使用 libtorrent 的python绑定库开发。 collectord.py dht爬虫服务监控程序 启动并监控...

    基于Python的企查查爬虫,爬取完整的公司数据+源代码+文档说明

    # Python_Crawler_Qichacha 基于Python的企查查爬虫,爬取完整的公司数据 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! &lt;项目介绍&gt; 1...

    python 编写的DHT Crawler 网络爬虫,抓取磁力链接.zip

    python爬虫DHTCrawler==========python 编写的DHT Crawler 网络爬虫,抓取DHT网络的磁力链接。文件----### collector.py dht网络爬虫脚本 抓取dht网络的磁力链接,使用 libtorrent 的python绑定库开发### collectord...

Global site tag (gtag.js) - Google Analytics