逃不掉的正则表达式

作者: _weber_ | 来源:发表于2016-12-23 10:48 被阅读44次

    导语

    很多人一听到正则表达式就头大了,一看正则表达式的相关文档头就更大了,因为看不懂啊,完全不是人类可以理解的啊!
    但是我要告诉你,想学习爬虫,你就无法逃掉正则表达式。
    这篇文章就是向大家证明,正则表达式一点都不可怕,只是看起来很可怕的样子。

    资料

    功能:

    以上一篇文章为基础(http://www.jianshu.com/p/359ce3c88082 ), 没看的请提前看下。
    在上一篇文章中我们已经成功获取到了贴吧中一个帖子的三页内容,其实我们想要的只是里面的图片(你懂得),现在我们想办法提取出所有图片的地址。

    本次代码

    picurls = re.findall('http://imgsrc.baidu.com/forum/w%3D580(.*?)"', m.decode(), re.S)
    with open('c:/wwb/python/temp/picsite.txt', 'a') as file:
      for each in picurls:
        picurl = 'http://imgsrc.baidu.com/forum/w%3D580'+each
        file.write(picurl)
    '''
    使用正则从网页源码中提取出所有图片地址
    m.decode()是为了将byte转换为string,因为re只能处理string
    re.S是为了让.可以匹配换行符
    使用for循环将每一个图片地址写入TXT
    '''
    

    现在你就可以得到一个包含所有图片地址的txt文件了。

    完整代码

    # -*- coding:utf-8 -*-  
    
    import urllib.request as request
    import re
    
    def baidu_tieba(url, begin_page, end_page):
    for i in range(begin_page, end_page+1):
        sName = 'c:/wwb/python/temp/'+str(i).zfill(5)+'.html'
        print('正在下载第'+str(i)+'个页面,并保存为'+sName)
        m = request.urlopen(url+str(i)).read()
        with open(sName, 'wb') as file:
            file.write(m)
        picurls = re.findall('http://imgsrc.baidu.com/forum/w%3D580(.*?)"', m.decode(), re.S)
        with open('c:/wwb/python/temp/picsite.txt', 'a') as file:
            for each in picurls:
                picurl = 'http://imgsrc.baidu.com/forum/w%3D580'+each
                file.write(picurl)
    print('Done')
    
    url = 'http://tieba.baidu.com/p/4906913050?pn='
    begin_page = 1
    end_page = 3
    baidu_tieba(url, begin_page, end_page)

    相关文章

      网友评论

        本文标题:逃不掉的正则表达式

        本文链接:https://www.haomeiwen.com/subject/hbckvttx.html