python 爬取菜鸟教程程序记录

#!/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 = '

(.+?)(.+?)

' # 抓取题目描述的正则匹配 expName = re.compile(expNamePat).findall(html) # 抓到题目描述 contentPat = '
(.*?)
' # 抓取源码的正则匹配 midResult = re.compile(contentPat, re.S).findall(html)[0] # 这个时候抓到的内容是杂乱的,中间还包含很多无用的html标签 re_h=re.compile(']*>') # 用来取出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 = '

(.+?)(.+?)

' expName = re.compile(expNamePat).findall(html) try: contentPat = '
(.*?)
' midResult = re.compile(contentPat, re.S).findall(html)[0] re_h=re.compile(']*>') 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 = '

程序源代码:

\n
(.*?)
' 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 爬取菜鸟教程程序记录)