BeautifulSoup не ловит полную ссылку - PullRequest
2 голосов
/ 19 сентября 2019

Когда я пытаюсь получить ссылку на веб-странице, bs4 не перехватывает всю ссылку, она останавливается до **?ref**.....
Я объясню вопрос через код:

imdb_link = "https://www.imdb.com/chart/top?ref_=nv_mv_250"
site = requests.get(imdb_link)
soup = BeautifulSoup(site.text,'lxml')

for items in soup.find("table",class_="chart").find_all(class_="titleColumn"):
    link = items.find("a").get('href')
    print(link)

Вывод:

/title/tt0111161/
/title/tt0068646/
/title/tt0071562/
/title/tt0468569/
/title/tt0050083/
/title/tt0108052/
/title/tt0167260/
...and so on..

Но это неправильно, как вы можете видеть, увидев веб-страницу, потому что это может быть:

/title/tt0111161/?ref_=adv_li_tt
/title/tt0068646/?ref_=adv_li_tt
...and so on...

Как я могуполучить всю ссылку?Я имею в виду ?ref_=adv_li_tt тоже?

Я использую Python 3.7.4

1 Ответ

0 голосов
/ 19 сентября 2019

В целом, возможно, было бы интересно попробовать получить полную ссылку - я думаю, что вам понадобится селен, чтобы позволить javascript запускаться на странице, вам не нужна полная ссылка, как видно на отображаемой странице.То, что у вас есть, с добавлением префикса https://www.imdb.com, идеально подходит для обслуживания.

import requests
from bs4 import BeautifulSoup as bs

with requests.Session() as s:
    r = s.get('https://www.imdb.com/chart/top?ref_=nv_mv_25')
    soup = bs(r.content, 'lxml')
    links = ['https://www.imdb.com' + i['href'] for i in soup.select('.titleColumn a')]

    for link in links:
        r = s.get(link)
        soup = bs(r.content, 'lxml')
        print(soup.select_one('title').text)

Вы можете разрешить загрузке страницы селен, чтобы контент рендерился, а затем переходил на bs4 для получения ссылок, как на странице:

from selenium import webdriver
from bs4 import BeautifulSoup as bs

d = webdriver.Chrome()
d.get('https://www.imdb.com/chart/top?ref_=nv_mv_25')
soup = bs(d.page_source, 'lxml')
d.quit()
links = ['https://www.imdb.com' + i['href'] for i in soup.select('.titleColumn a')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...