美文网首页Go! Go! Python
Python爬虫学习(2)显示wiki页面数据

Python爬虫学习(2)显示wiki页面数据

作者: 语落心生 | 来源:发表于2017-06-18 22:20 被阅读0次

    当我们决定好构建的url连接之后,所需要的就是观察网页的html结构
    我们找到的wiki百科内容为mw-cntent-text标签,由于我们只需要其中包含的p后的标签词条链接,构建url结构 mw-content-text -> p[0]


    56565656.png

    我们发现编辑链接的结构如下
    所有词条连接的a标签位于词条连接的mp-tfa标签下
    find层次结构为 mp-tfa -> a -> a href

    56876586575.png

    采集数据

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    pages = set()
    def getlinks(pageUrl):
        global pages
        html=urlopen("http://en.wikipedia.org"+pageUrl)
        bsObj=BeautifulSoup(html,'html.parser')
        try:
            print(bsObj.h1.get_text())
            print(bsObj.find(id="mw-content-text").findAll("p")[0])
            print(bsObj.find(id="mp-tfa").find("a").attrs['href'])
        except AttributeError:
            print("页面缺少一些属性")
    
        for link in bsObj.findAll("a" , href=re.compile("^(/wiki/)")):
            if 'href' in link.attrs:
                if link.attrs['href'] not in pages:
                    newPage=link.attrs['href']
                    print(newPage)
                    pages.add(newPage)
                    getlinks(newPage)
    getlinks("")
    

    console output

    09809809.png

    发现在找到a标签之后立即抛出异常
    检查编辑链接的层次顺序,修改 mp-tfa -> p -> b -> a href

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    pages = set()
    def getlinks(pageUrl):
        global pages
        html=urlopen("http://en.wikipedia.org"+pageUrl)
        bsObj=BeautifulSoup(html,'html.parser')
        try:
            print(bsObj.h1.get_text())
            print(bsObj.find(id="mw-content-text").findAll("p")[0])
            print(bsObj.find(id="mp-tfa",style="padding:2px 5px").find("p").find("b").find("a").attrs['href'])
        except AttributeError:
            print("页面缺少一些属性")
    
        for link in bsObj.findAll("a" , href=re.compile("^(/wiki/)")):
            if 'href' in link.attrs:
                if link.attrs['href'] not in pages:
                    newPage=link.attrs['href']
                    print("--------\n"+newPage)
                    pages.add(newPage)
                    getlinks(newPage)
    getlinks("")
    

    console output

    7978979.png

    原因在于之前分析的页面仅在于Main_page页面,继续对跳转之后的页面进行解析,发现并没有mp-tfa标签

    jhgjhgjh.png

    修改url构造 mw-content-test -> p ->a href

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    pages = set()
    def getlinks(pageUrl):
        global pages
        html=urlopen("http://en.wikipedia.org"+pageUrl)
        bsObj=BeautifulSoup(html,'html.parser')
        try:
            print(bsObj.h1.get_text())
            print(bsObj.find(id="mw-content-text").findAll("p")[0])
            print(bsObj.find(id="mw-content-text").find("p").find("a").attrs['href'])
        except AttributeError:
            print("页面缺少一些属性")
    
        for link in bsObj.findAll("a" , href=re.compile("^(/wiki/)")):
            if 'href' in link.attrs:
                if link.attrs['href'] not in pages:
                    newPage=link.attrs['href']
                    print("--------\n"+newPage)
                    pages.add(newPage)
                    getlinks(newPage)
    getlinks("")
    

    console output
    成功拿到词条链接

    867867867.png

    相关文章

      网友评论

        本文标题:Python爬虫学习(2)显示wiki页面数据

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