从维基百科抓取链接

scraping links from wikipedia

所以我正在尝试从随机维基百科页面中抓取 links 这是我到目前为止的代码:

from bs4 import BeautifulSoup
import requests
import pandas as pd
import urllib2


# function get random page
def get_random():
    import requests
#    r = requests.get('https://en.wikipedia.org/wiki/Special:Random')

    r = requests.get('https://en.wikipedia.org/wiki/Carole_Ann')

    return r.url
#========================


#finding the valid link
def validlink(href):
    if href:
        if re.compile('^/wiki/').search(href):
            if not re.compile('/\w+:').search(href):
                return True
    return False
#validlink()===========



#the first site
a1 = get_random()

#print("the first site is: " + a1) 
# the first site end()====

#looking for the article name:

blin = requests.get(a1)

soup = BeautifulSoup(blin.text, 'html.parser')

title = soup.find('h1', {'class' : 'firstHeading'})

print("starting website: " + a1 + " Titled:  " + title.text)

print("")
#=============================

    #first article done

#find body:
import re

body = requests.get(a1).text

soup = BeautifulSoup(body, 'lxml')

for link in soup.findAll("a"):
    url = link.get("href", "")
print(
#======================

我知道我在最后一部分做错了。我是 python 的新手,所以我不知道如何处理这部分,我需要的是从随机页面将我带到的随机站点中提取所有 link,然后我将 link 和标题从该网站上拉下来, 然后我需要将维基百科 links 从那个页面中拉出来,这就是我在最后一段代码中想要做的还有另一个片段:

此时我想打印所有 links,它在根据我在顶部的有效 links 函数进行测试后发现:

再次见谅,我是新手,不懂。但是请帮助我解决这个问题。

所以我的问题是:我需要创建一段代码,将所有网站 link 从维基百科页面中提取出来(注意我仍然不知道该怎么做for 循环是我根据自己的研究得出的最佳猜测)然后我需要测试我根据有效 link 函数提取的 links,并打印出所有有效的 link s.

如果您希望将其作为列表,则创建新列表并且 append() url 如果它有效。

因为同一个 url 可以在页面上出现多次,所以我还要检查 url 是否已经在列表中。

valid_urls = []

for link in soup.find_all('a'): # find_all('a', {'href': True}):
    url = link.get('href', '')
    if url not in valid_urls and validlink(url):
        valid_urls.append(url)

print(valid_urls)

from bs4 import BeautifulSoup
import requests
import re

# --- functions ---

def is_valid(url):
    """finding the valid link"""

    if url:
        if url.startswith('/wiki/'): # you don't need `re` to check it
            if not re.compile('/\w+:').search(url):
                return True

    return False

# --- main ---

#random_url = 'https://en.wikipedia.org/wiki/Special:Random'
random_url = 'https://en.wikipedia.org/wiki/Carole_Ann'

r = requests.get(random_url)
print('url:', r.url)

soup = BeautifulSoup(r.text, 'html.parser')

title = soup.find('h1', {'class': 'firstHeading'})

print('starting website:', r.url)
print('titled:', title.text)
print()

valid_urls = []

for link in soup.find_all('a'): # find_all('a', {'href': True}):
    url = link.get('href', '')
    if url not in valid_urls and is_valid(url):
        valid_urls.append(url)

#print(valid_urls)

#for url in valid_urls:        
#    print(url)

print('\n'.join(valid_urls))