抓取教程网页的小爬虫

本文介绍了一个初学者使用Python2.7编写网页爬虫的过程,首先通过模仿他人代码并解决版本问题,然后逐步分解任务,明确目标为获取网页内容。通过urllib的urlopen().read方法下载网页,再利用正则表达式提取所需信息。作者强调了多测试和逐步解决问题的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

First 爬虫

这是昨天下午自己突然觉得想爬点东西就开始着手写自己的爬虫。我爬的是廖雪峰老师的python课程。这是我之前见过一个代码也是爬他的网站的。自己觉得爬爬也不错。

第一步 模仿

我的第一步是仿照人家的代码,然后,自己怎么也没有搞定。问题一大
堆,后来想了想可能是由于python的版本问题。我用的是python2.7
.现在python3 因为强大的功能,越来越多的人都在使用。但我不需要
那么强大的功能,所以就用python2.7就可以了。
第一步:自己查看他的源代码和自己找的例子来分析他的思路
第二步:自己查找资料,练习和测试

第二步 写

从自己的模仿阶段发现自己越模仿越觉得乱。所以自己就开始一个模块
模块的写。首先明确自己的目标,爬取文章内容。从这方面看,自己做
的第一件事就是把网页弄下来。这比较简单,用urllib中的urlopen().read就可以把网页弄下来(这个网页比较简单,复杂的话需要伪装浏览器,模拟登陆等)

把网页弄下来之后,自己就开始尝试分析网页,把网页里面的文章内容取
出来,自己查了很多资料,结合自己的水平,这个正则表达式是比较合适
的。我自己用正则表达式做了很多的筛选,包括,文章内容,还有网页中
网络的网址。都是用正则表达进行的筛选,因为自己的能力有限,所以许
多东西分开做比较适合自己。多测试,一步接一步。

下面把自己的代码贴出来

#coding=utf-8
import re
import urllib2

def webspider(url):
    #获取网页信息
    Mypage=urllib2.urlopen(url).read()
    #正则表达式匹配
    MyItem=re.compile(r"<div class=\"x-wiki-content\">(.*?)</div>",re.S)
    match=MyItem.search(Mypage)
    text=match.group(1)
    #print text
    #去除特定的字符串
    text1=text.replace('<p>',' ') # 赋值
    text2=text1.replace('</p>',' ')
    text3=text2.replace('<code>',' ')
    text4=text3.replace('</code>',' ')
    #修改字符串常用的标示  &#39; 代表’ &gt; 代表 >
    text5=text4.replace('&#39;','\'')
    text6=text5.replace('&gt;','>')
    text7=text6.replace('<li>','*').replace('</li>','')
    #写入文本文件中

    save=open('python.txt','a')
    save.write(text6)
    save.close()

    #print type(text)
    #print text2


def geturl(url):
    #批量获取网页中的教程网址
    Mypage=urllib2.urlopen(url).read()
    MyITem=re.compile(r'margin-right:-15px;\">(.*?) </ul>',re.S)
    match=MyITem.search(Mypage)
    text=match.group(0)
    #print text
    #print type(text)

    myurl=re.compile(r'<a href="/wiki(.*?)\">',re.S)
    getmyurl=myurl.findall(text)

    dima='http://www.liaoxuefeng.com/wiki'

    #print dima+getmyurl[0]
    #print type(getmyurl[0])
    #构建成全新的网址

    for a in getmyurl:
        b=dima+a
        #去除空格
        b1=' '.join(b.split())
        print b1

        #调用直接分析

        webspider(b1)



if __name__ == '__main__':
        #web='http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000'
        web='http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013747381369301852037f35874be2b85aa318aad57bda000'

        geturl(web)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值