我爱编程

python 爬取菜鸟教程程序记录

2018-04-13  本文已影响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个)

上一篇下一篇

猜你喜欢

热点阅读