python3解析和维基百科页面
问题描述:
所以我需要从“计算机科学”维基百科页面获得前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”
答
眼前的问题,我看到的是,前三个项目回来,当我运行这个片段:
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']
只是一个字符串。
我想要第10个链接,它们的内容并不重要。因此,我写了find_all('a'),是不是正确? – Lila
为您修改的问题编辑 – Adam