美文网首页我爱编程
python 爬取菜鸟教程程序记录

python 爬取菜鸟教程程序记录

作者: 摘月亮的人 | 来源:发表于2018-04-13 01:26 被阅读0次
    #!/usr/bin/env python3
    import re
    import html as ht   
    import urllib.request
    
    def craw(url, page):
        html = urllib.request.urlopen(url).read().decode('utf-8')  # 因为存在编码问题,所以先把html解码
        expNamePat = '<p><strong>(.+?)</strong>(.+?)</p>'  # 抓取题目描述的正则匹配
        expName = re.compile(expNamePat).findall(html)       # 抓到题目描述
        contentPat = '<div class="hl-main">(.*?)</span></div>'  # 抓取源码的正则匹配
        midResult = re.compile(contentPat, re.S).findall(html)[0]  # 这个时候抓到的内容是杂乱的,中间还包含很多无用的html标签
        re_h=re.compile('</?\w+[^>]*>')     # 用来取出html标签
        content = re_h.sub('', midResult)   # 去除html标签
        
        content = ht.unescape(content)     # 把抓到的内容在进行html解码
        file = open('test.c','w')                 # 把抓到的内容保存
        file.write(content)
        file.close()
    
    for i in range(1,  2):
        url = 'http://www.runoob.com/cprogramming/c-exercise-example{}.html'.format(i)
        #print(url)
        craw(url, i)
    

    这次先写一部分,完整的版本之后会更新

    #!/usr/bin/env python3
    import re
    import html as ht
    import urllib.request
    
    def craw(url, page):
        html = urllib.request.urlopen(url).read().decode('utf-8')
        expNamePat = '<p><strong>(.+?)</strong>(.+?)</p>'
        expName = re.compile(expNamePat).findall(html)
        try:
            contentPat = '<div class="hl-main">(.*?)</span></div>'
            midResult = re.compile(contentPat, re.S).findall(html)[0]
            re_h=re.compile('</?\w+[^>]*>')
            content = re_h.sub('', midResult)
            content = ht.unescape(content)
            print('正在爬取第' + str(page) + '个程序...')
            file = open( str(page) +'-c语言编程实例.c','w')
            content = "//" + expName[0][0] + expName[0][1] + '\n' + content
            file.write(content)
            file.close()
        except:
            try:
                contentPat = '<p>程序源代码:</p>\n<pre>(.*?)</pre>'
                content = re.compile(contentPat, re.S).findall(html)[0]
                content = ht.unescape(content)
                print('正在爬取第' + str(page) + '个程序...')
                file = open( str(page) +'-c语言编程实例.c','w')
                content = "//" + expName[0][0] + expName[0][1] + '\n' + content
                file.write(content)
                file.close()
            except:
                pass
    for i in range(1, 101):
        url = 'http://www.runoob.com/cprogramming/c-exercise-example{}.html'.format(i)
        #print(url)
        craw(url, i)
    

    在这个过程中有些页面的标签有变动,就用了 try ...except...嵌套,而有些程序里面还有自定义的头文件,所以有些程序没有抓下来(具体是第50个)

    • 程序还有不足的地方,比如抓下来的文本没有保持原来的格式,
      在抓取标题的时候有些内容没抓下来

    相关文章

      网友评论

        本文标题:python 爬取菜鸟教程程序记录

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