所以我需要从计算机科学'获得前10个链接。维基百科页面。然后我需要为CS页面中的每个链接获取10个链接。所以最后我会有10 * 10 = 100个链接。
直到现在我写了这段代码:
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 :(得分:0)
我看到的直接问题是运行此代码段时返回的前三项:
for link in soup.find_all('a', limit=10):
rez=link.get('href')
print(rez)
是:
None
#mw-head
#p-search
这就是为什么当你调用rez.find_all()
时,python告诉你'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']
只是一个字符串。