python 爬虫

爬虫程序主要是把第n层网页的连接也下载下来
主程序
爬虫启动
生成一个队列
f(x) 循环 队列为空跳出
网址出队列
下载网页 找下一层连接
添加到队列

 

from sys import argv
from os import makedirs,unlink,sep
from os.path import dirname,exists,isdir,splitext
from string import replace ,find,lower
from htmllib import HTMLParser
from urllib import urlretrieve
from urlparse import urlparse,urljoin
from formatter import DumbWriter,AbstractFormatter
from cStringIO import StringIO
import os,sys

syspath=sys.argv[0]


class retri(object):
    def __init__(self,url):
        self.url=url
        self.file=self.filename(url)
        
    def filename(self,url,deffile='index.htm'):
        parsedurl=urlparse(url,'http:',0)
        if parsedurl[2]=='':
            path=parsedurl[1]+'//index.htm'
        else:
            path=parsedurl[1]+parsedurl[2]
        ext=splitext(path)
        if ext[1]=='':
            if path[-1]=='/':
                path+=deffile
            else:
                path+='/'+deffile
        ldir=dirname(path)
#        ldir=path
        if sep !='/':
            ldir =replace(ldir,'/',sep)
        if not isdir(ldir):
            if exists(ldir):
                unlink(ldir)
            makedirs(ldir)
        return path
#        return parsedurl[2]
    
    
    def download(self):
        try:
            retval=urlretrieve(self.url,self.file)
            return retval
        except IOError:
            retval=('*** error:invalid url "%s"'%self.url)
            return retval
            
    def parse_and_getlink(self):
        self.parser=
        (AbstractFormatter(DumbWriter(StringIO())))
        self.parser.feed(open(self.file).read())
        self.parser.close()
        return self.parser.anchorlist
    
    
    
class crawler(object):
    count=0
    def __init__(self,url):
        self.q=[url]
        self.seen=[]
        self.dom=urlparse(url)[1]
    
    def get_page(self,url):
        r=retri(url)
        retval=r.download()
        if retval[0]=='*':
            print retval,'.. skipping parse'
            return
        crawler.count+=1
        print '\n(',crawler.count,')'
        print 'url:',url
        print 'file:',retval[0]
        self.seen.append(url)
        
        links=r.parse_and_getlink()
        for eachlink in links:
            if eachlink[:4]!='http' and find(eachlink,'://')==-1:
                eachlink=urljoin(url,eachlink)
            print '* ',eachlink
            
            if find(lower(eachlink),'mailto:')!=-1:
                print '... discarded,mailto link'
                continue
            
            if eachlink not in self.seen:
                if find(eachlink,self.dom)==-1:
                    print '...discarded,not in domain'
                else:
                    if eachlink not in self.q:
                        self.q.append(eachlink)
                        print '...new,added to q'
                    else:
                        print '...discarded,already in q'
                        
            else:
                print '... discarded,already processed'
        
        
        
    def go(self):
        while self.q:
            url=self.q.pop()
            self.get_page(url)
            
            
def main():
    if len(argv)>1:
        url=argv[1]
    else:
        try:
            url=raw_input('enter starting url:')
        except(KeyboardInterrupt,EOFError):
            url=''
    if not url:return
    robot =crawler(url)
    robot.go()
    
if __name__=='__main__':
    main()
        
        
    
    

 

转载于:https://www.cnblogs.com/frog2008/p/6845306.html

### Python爬虫的学习资源与使用方法 Python爬虫是一种高效的工具,用于自动化的网络信息采集。由于其丰富的库支持以及简洁易懂的语法特性,Python 成为了编写网络爬虫的最佳选择之一[^3]。 #### 学习Python爬虫的基础知识 学习Python爬虫不仅涉及理论知识的理解,还需要通过实际操作来加深印象。在移动设备上也可以轻松完成这些任务,因为手机端的Python环境配置较为简便,可以随时随地进行实践练习[^1]。 #### 推荐的Python爬虫教程列表 以下是几份高质量的Python爬虫教程推荐: - **基础篇** - 《一只小爬虫》[^2] - 《Python与简单网络爬虫的编写》[^2] - **进阶篇** - 《[Python]网络爬虫(五):urllib2的使用细节与抓站技巧》[^2] - 《[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)》[^2] - **高级功能** - 《Python爬虫——抓取网页并解析HTML》[^2] - 《Python正则表达式指南》[^2] 除了上述具体的文章外,《Python爬虫新手指南及简单实战》也是一份非常适合初学者的内容,其中包含了详细的案例分析和代码演示[^3]。 #### 实践中的关键技术点 当开始构建自己的第一个爬虫项目时,需要注意以下几个方面: 1. 数据请求模块的选择,比如`requests`或内置的`urllib`。 2. HTML页面解析技术的应用,例如BeautifulSoup或者lxml库。 3. 对于复杂的数据提取需求,则可能需要用到正则表达式的辅助[^2]。 下面展示一段简单的爬虫脚本作为参考: ```python import requests from bs4 import BeautifulSoup url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') titles = soup.find_all('h1') for title in titles: print(title.text.strip()) ``` 此段程序展示了如何访问目标网址,并从中提取所有的标题标签内容[^3]。 #### 工具扩展建议 如果计划进一步深入研究大数据量场景下的爬虫应用,那么像Pandas这样的数据分析框架将会非常有用。它可以方便地管理和转换所收集到的信息至结构化形式以便后续统计分析工作[^4]。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值