Python 如何从维基百科文章的子链接中获取数据?

Python 如何从维基百科文章的子链接中获取数据?,python,beautifulsoup,Python,Beautifulsoup,是否可以从维基百科文章中的子链接中提取数据 import bs4 as bs import urllib.request import re sauce = urllib.request.urlopen('https://en.wikipedia.org/wiki/Greenhouse_gas').read() soup=bs.BeautifulSoup(sauce,'lxml') links = soup.find("div",{"id" : "bodyContent"}).findAll("

是否可以从维基百科文章中的子链接中提取数据

import bs4 as bs
import urllib.request
import re
sauce = urllib.request.urlopen('https://en.wikipedia.org/wiki/Greenhouse_gas').read()
soup=bs.BeautifulSoup(sauce,'lxml')
links = soup.find("div",{"id" : "bodyContent"}).findAll("a" , href=re.compile("(/wiki/)+([A-Za-z0-9_:()])+"))

for link in links:
    print(link['href'])
    webpage=urllib.request.urlopen(link['href'])
    soup=bs.BeautifulSoup(webpage,'lxml')

您的
链接
列表包含您要删除的URL的结尾。运行代码时,我收到一个
值错误:未知url类型:'/wiki/Wikipedia:Pending_changes'
。所以要解决我认为我

s your issue, try this:

beg_link = 'http://www.wikipedia.com'

for link in links:
    full_link = beg_link + link['href']
    print(full_link)
    webpage=urllib.request.urlopen(full_link)
    soup=bs.BeautifulSoup(webpage,'lxml')
打印并产生以下结果:

http://www.wikipedia.com/wiki/Wikipedia:Pending_changes
http://www.wikipedia.com/wiki/GHG_(disambiguation)
http://www.wikipedia.com/wiki/File:Greenhouse_Effect.svg
...

是的,可以跟踪链接并检索更多链接。为此,您可以使用递归函数(一个调用自身的函数)。您还应设置检索链接的数量限制,否则您的程序将不会停止,并且您应检查您尚未访问链接:

import bs4 as bs
import urllib2
import re


def get_links(links, url, limit=100):
    sauce = urllib2.urlopen('https://en.wikipedia.org/wiki' + url).read()
    soup = bs.BeautifulSoup(sauce,'lxml')
    pos = len(links)
    for link in soup.find("div",{"id" : "bodyContent"}).findAll("a" , href=re.compile("(/wiki/)+([A-Za-z0-9_:()])+")):
        if len(links) < limit and link['href'] not in links:
            links.append(link['href'])
    if len(links) < limit:
        for url in links[pos:]:
            get_links(links, url, limit)


def main():
    links = []
    get_links(links, '/Greenhouse_gas')
    print links

if __name__ == '__main__':
    main()
将bs4作为bs导入
导入urllib2
进口稀土
def get_链接(链接、url、限制=100):
sauce=urllib2.urlopen('https://en.wikipedia.org/wiki“+url).读取()
汤=bs.BeautifulSoup(酱汁,'lxml')
pos=len(链接)
对于soup.find(“div”,“id”:“bodyContent”}).findAll(“a”,href=re.compile((/wiki/)+)([a-Za-z0-9:())+”)中的链接:
如果len(links)
这里有什么问题?是的,它“可以从维基百科文章中的子链接中获取数据”;运行上述代码时出现了什么问题/您得到了什么回溯?但当我尝试使用上述代码访问这些页面时,会显示错误