Итерация по URL-адресам не позволяет найти правильный href в Python с помощью BeautifulSoup - PullRequest
0 голосов
/ 06 августа 2020

Я просматриваю веб-сайт в коде. Вот что делает мой код. Перебирает 52 страницы и получает ссылку на каждый URL.

Затем он перебирает эти URL и пытается получить ссылку для английского sh перевода. если вы видите монгольский веб-сайт, на нем есть раздел «Орчуулга» вверху справа и «Engli sh» внизу - это ссылка на английский sh перевод.

Однако мой Код не может получить ссылку на английский sh перевод и дает неправильный URL. Ниже приведен пример вывода для первой статьи.

1
{'https://mn.usembassy.gov/mn/2020-naadam-mn/': 'https://mn.usembassy.gov/mn/sitemap-mn/'}

Ожидаемый результат для первой страницы должен быть

1
{'https://mn.usembassy.gov/mn/2020-naadam-mn/': 'https://mn.usembassy.gov/2020-naadam/'}

Ниже мой код

import requests
from bs4 import BeautifulSoup


url = 'https://mn.usembassy.gov/mn/news-events-mn/page/{page}/'

urls = []
for page in range(1, 53):
    print(str(page) + "/52")
    soup = BeautifulSoup(requests.get(url.format(page=page)).content, 'html.parser')
    for h in soup.find_all('h2'):
        a = h.find('a')
        urls.append(a.attrs['href'])

print(urls)

i = 0
bilingual_dict = {}
for url in urls:
    i += 1
    print(i)
    soup = BeautifulSoup(requests.get(url.format(page=url)).content, 'html.parser')
    for div in soup.find_all('div', class_='translations_sidebar'):
        for ul in soup.find_all('ul'):
            for li in ul.find_all('li'):
                a = li.find('a')
    bilingual_dict[url] = a['href']
    print(bilingual_dict)
print(bilingual_dict)

1 Ответ

0 голосов
/ 06 августа 2020

Этот скрипт напечатает ссылку на engli sh перевод:

import requests
from bs4 import BeautifulSoup


url = 'https://mn.usembassy.gov/mn/2020-naadam-mn/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

link = soup.select_one('a[hreflang="en"]')
print(link['href'])

Печать:

https://mn.usembassy.gov/2020-naadam/

Полный код: (Если нет ссылки на английский sh перевод, устанавливается значение None)

import requests
from bs4 import BeautifulSoup
from pprint import pprint

url = 'https://mn.usembassy.gov/mn/news-events-mn/page/{page}/'

urls = []
for page in range(1, 53):
    print('Page {}...'.format(page))
    soup = BeautifulSoup(requests.get(url.format(page=page)).content, 'html.parser')
    for h in soup.find_all('h2'):
        a = h.find('a')
        urls.append(a.attrs['href'])

pprint(urls)

bilingual_dict = {}
for url in urls:
    print(url)
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    link = soup.select_one('a[hreflang="en"]')
    bilingual_dict[url] = link['href'] if link else None

pprint(bilingual_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...