Очистите URL с помощью BeautifulSoup в Python 3 - PullRequest
0 голосов
/ 24 декабря 2018

Я попробовал этот код, но список с URL остается пустым.Нет ошибок массажа, ничего.

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import re

req = Request('https://www.metacritic.com/browse/movies/genre/date?page=0', headers={'User-Agent': 'Mozilla/5.0'})
html_page = urlopen(req).read()

soup = BeautifulSoup(html_page, features="xml")
links = []
for link in soup.findAll('a', attrs={'href': re.compile("^https://www.metacritic.com/movie/")}):
    links.append(link.get('href'))

print(links)

Я хочу очистить все URL, которые начинаются с "https://www.metacritic.com/movie/", найденных в данном URL" https://www.metacritic.com/browse/movies/genre/date?page=0".

Чтоя делаю не так?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Сначала вы должны использовать стандартную библиотеку «html.parser» вместо «xml» для анализа содержимого страницы.Он лучше работает с неработающим html (см. Beautiful Soup findAll не находит их все )

Затем взгляните на исходный код страницы, которую вы анализируете.Элементы, которые вы хотите найти, выглядят так: <a href="/movie/woman-at-war">

Поэтому измените свой код следующим образом:

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import re

req = Request('https://www.metacritic.com/browse/movies/genre/date?page=0', headers={'User-Agent': 'Mozilla/5.0'})
html_page = urlopen(req).read()

soup = BeautifulSoup(html_page, 'html.parser')
links = []
for link in soup.findAll('a', attrs={'href': re.compile("^/movie/")}):
    links.append(link.get('href'))

print(links)
0 голосов
/ 24 декабря 2018

Ваш код верный.

Список остается пустым, поскольку на этой странице нет URL-адресов, соответствующих этому шаблону.Попробуйте re.compile("^/movie/") вместо.

...