2015-12-21 75 views
0

所以我需要从“计算机科学”维基百科页面获得前10个链接。然后我需要从CS页面获得每个链接的10个链接。所以我最终会有10 * 10 = 100个链接。python3解析和维基百科页面

,直到如今我写了这个代码:

import urllib.request as urllib2 
html = urllib2.urlopen('https://en.wikipedia.org/wiki/Computer_science').read() 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(html, "lxml") 


for link in soup.find_all('a', limit=10): 
    rez=link.get('href') 
    for i in rez.find_all('a', limit=10): 
     print(i) 

当我运行它,我得到这个错误:

'NoneType' 对象有没有属性 'find_all'


谢谢,这有助于很多。接下来,我需要从每一个环节返回10个链接,从Programming_language_theory,Computational_complexity_theory即10个链接..等我试图做这部分是这样的:

for link in soup.find_all('a', href=True, title=True, limit=10): 
     print(link['href']) 
     for link2 in link['href'].find_all('a', href=True, title=True, limit=10): 
      print(link2['href']) 

但我发现了一个错误:“STR”对象有没有属性“find_all”

回答

0

眼前的问题,我看到的是,前三个项目回来,当我运行这个片段:

for link in soup.find_all('a', limit=10): 
    rez=link.get('href') 
    print(rez) 

是:

None #mw-head #p-search

这就是为什么当你调用rez.find_all()蟒蛇告诉你'NoneType' object has no attribute 'find_all'

编辑#2:
一个可能的解决方案,以消除None回报,在文章的链接和子链接是:

for link in soup.find_all('a', href=True, title=True, limit=10): 
     print(link['href']) 
     sub_html = urllib2.urlopen('https://en.wikipedia.org' + link['href']) 
     sub_soup = BeautifulSoup(sub_html, "lxml") 
     for sub_link in sub_soup.find_all('a', href=True, title=True, limit=10): 
      print(sub_link['href']) 

的原因为您的新问题是,你需要创建新链接的新汤对象,而link['href']只是一个字符串。

+0

我想要第10个链接,它们的内容并不重要。因此,我写了find_all('a'),是不是正确? – Lila

+0

为您修改的问题编辑 – Adam