соскабливать ссылки из википедии - PullRequest
0 голосов
/ 08 апреля 2020

Итак, я пытаюсь почистить ссылки со случайной страницы википедии. Вот мой код:

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, поэтому я просто понятия не имею, как go об этой части, что мне нужно, это вытащить все ссылки со случайного сайта, на который меня ведет случайная страница, затем я перетаскиваю ссылку и название с этого сайта, тогда мне нужно извлечь ссылки на википедию с этой страницы, что я и собираюсь сделать в последнем фрагменте кода, вот еще один фрагмент:

enter image description here

и в этот момент я хочу напечатать все ссылки, которые он находит после того, как они были проверены с моей действующей функцией ссылок вверху:

enter image description here

снова простите меня за то, что я новое и не понимающее в этом. Но, пожалуйста, помогите, я не могу понять это.

, поэтому у меня возник вопрос: мне нужно создать фрагмент кода, который будет вытягивать все ссылки на веб-сайты со страницы Википедии (к сведению, что я до сих пор не знаю, как сделать, чтобы l oop было моей лучшей догадкой, основанной на моих собственных исследованиях), тогда мне нужно проверить ссылки, которые я перетянул на мою функцию validlink, и распечатать все действительные ссылки.

1 Ответ

0 голосов
/ 08 апреля 2020

Если вы используете его в качестве списка, создайте новый список и 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))
...