资源简介

本文主要是参看我的博客http://blog.csdn.net/eastmount/article/details/44342559 [python学习] 简单爬取维基百科程序语言消息盒,主要讲述Python爬取维基百科的方法,主要是提供一种方法和思想,希望对大家有所帮助。 建议同博客一起阅读,否则可能感觉有些模糊。免费资源分享给大家学习。

资源截图

代码片段和文件信息

# coding=utf-8
import urllib
import time
import re

#第一步 获取维基百科内容
#http://zh.wikipedia.org/wiki/程序设计语言列表
keyname=“程序设计语言列表“
temp=‘http://zh.wikipedia.org/wiki/‘+str(keyname)
content = urllib.urlopen(temp).read()
open(‘wikipedia.html‘‘w+‘).write(content)
print ‘Start Crawling pages!!!‘

#第二步 获取网页中的所有URL
#从原文中“0-9“到“参看“之间是A-Z各个语言的URL
start=content.find(r‘0-9‘)
end=content.find(r‘参看‘)
cutcontent=content[start:end]
link_list = re.findall(r“(?<=href=\“).+?(?=\“)|(?<=href=\‘).+?(?=\‘)“ cutcontent)
fileurl=open(‘test.txt‘‘w‘)
for url in link_list:
    #字符串包含wiki或/w/index.php则正确url 否则A-Z
    if url.find(‘wiki‘)>=0 or url.find(‘index.php‘)>=0:     
        fileurl.write(url+‘\n‘)
        #print url
        num=num+1
fileurl.close()
print ‘URL Successed! ‘num‘ urls.‘

#第三步 下载每个程序URL静态文件并获取Infobox对应table信息
#国家:http://zh.wikipedia.org/wiki/阿布哈茲
#语言:http://zh.wikipedia.org/wiki/Actionscript
info=open(‘infobox.txt‘‘w‘)
info.write(‘****************获取程序语言信息*************\n\n‘)
j=1
for url in link_list:
    if url.find(‘wiki‘)>=0 or url.find(‘index.php‘)>=0:
        #下载静态html
        wikiurl=‘http://zh.wikipedia.org‘+str(url)
        print wikiurl
        language = urllib.urlopen(wikiurl).read()
        name=str(j)+‘ language.html‘
        #注意 需要创建一个country的文件夹 否则总报错No such file or directory
        open(r‘language/‘+name‘w+‘).write(language) #写方式打开+没有即创建
        #获取title信息
        title_pat=r‘(?<=tle>).*?(?=tle>)‘
        title_ex=re.compile(title_patre.M|re.S)
        title_obj=re.search(title_ex language) #language对应当前语言HTML所有内容
        title=title_obj.group()
        #获取内容‘C语言 - 维基百科,自由的百科全书‘ 仅获取语言名
        middle=title.find(r‘-‘)
        info.write(‘【程序语言  ‘+title[:middle]+‘】\n‘)
        print title[:middle]

        #第四步 获取Infobox的内容
        #标准方法是通过匹配
确认其内容,找与它最近的一个结束符号
        #但此处分析源码后取巧

实现
        start=language.find(r‘        end=language.find(r‘

‘+title[:middle-1])    #减去1个空格
        infobox=language[start:end]
        #print infobox

        #第五步 获取table中属性-属性值
        if “infobox vevent“ in language: #防止无Infobox输出多余换行
            #获取table中tr值
            res_tr = r‘(.*?)‘
            m_tr =  re.findall(res_trinfoboxre.S|re.M)
            for line in m_tr:
                #print unicode(line‘utf-8‘)
            
                #获取表格第一列th 属性
                res_th = r‘(.*?)‘
                m_th = re.findall(res_thlinere.S|re.M)
                for mm in m_th:
                    #如果获取加粗的th中含超链接则处理
                    if “href“ in mm:
                        restr = r‘(.*?)‘
                        h = re.findall(restrmmre.S|re.M)
                        print unicode(h[0]‘utf-8‘)
                        info.write(h[0]+‘\n‘)
                    else:
                        #报错用str()不行 针对两个类型相同的变量
                        #TypeError: coer


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       9757  2015-03-18 03:57  爬取维基百科\infobox.txt

     文件      94247  2015-03-18 03:49  爬取维基百科\language\1 language.html

     文件      31637  2015-03-18 03:49  爬取维基百科\language\10 language.html

     文件      28733  2015-03-18 03:49  爬取维基百科\language\11 language.html

     文件      29963  2015-03-18 03:49  爬取维基百科\language\12 language.html

     文件      28461  2015-03-18 03:49  爬取维基百科\language\13 language.html

     文件      28461  2015-03-18 03:49  爬取维基百科\language\14 language.html

     文件      29895  2015-03-18 03:49  爬取维基百科\language\15 language.html

     文件      30099  2015-03-18 03:49  爬取维基百科\language\16 language.html

     文件      31249  2015-03-18 03:49  爬取维基百科\language\17 language.html

     文件      64626  2015-03-18 03:49  爬取维基百科\language\18 language.html

     文件      28529  2015-03-18 03:49  爬取维基百科\language\19 language.html

     文件      24929  2015-03-18 03:49  爬取维基百科\language\2 language.html

     文件      30170  2015-03-18 03:49  爬取维基百科\language\20 language.html

     文件     111402  2015-03-18 03:50  爬取维基百科\language\21 language.html

     文件     110463  2015-03-18 03:50  爬取维基百科\language\22 language.html

     文件      30167  2015-03-18 03:50  爬取维基百科\language\23 language.html

     文件      29555  2015-03-18 03:50  爬取维基百科\language\24 language.html

     文件      28869  2015-03-18 03:50  爬取维基百科\language\25 language.html

     文件      30031  2015-03-18 03:50  爬取维基百科\language\26 language.html

     文件      28461  2015-03-18 03:50  爬取维基百科\language\27 language.html

     文件      29963  2015-03-18 03:50  爬取维基百科\language\28 language.html

     文件      31317  2015-03-18 03:50  爬取维基百科\language\29 language.html

     文件      94247  2015-03-18 03:49  爬取维基百科\language\3 language.html

     文件      31204  2015-03-18 03:50  爬取维基百科\language\30 language.html

     文件      33126  2015-03-18 03:50  爬取维基百科\language\31 language.html

     文件      35478  2015-03-18 03:50  爬取维基百科\language\32 language.html

     文件      27324  2015-03-18 03:50  爬取维基百科\language\33 language.html

     文件      30031  2015-03-18 03:50  爬取维基百科\language\34 language.html

     文件      28529  2015-03-18 03:50  爬取维基百科\language\35 language.html

............此处省略45个文件信息

评论

共有 条评论